我有以下情況:生產者 - 消費者:怎麼知道通知prodcution完成
- 閱讀從數據庫
- 數據做工作「計算」
- 結果寫入數據庫
我有一個線程從數據庫讀取並將生成的對象放入BlockingQueue。這些對象的體重非常大,因此隊列限制了內存中對象的數量。 多個線程從隊列中取對象,執行工作並將結果放入第二個隊列中。 最終線程從第二個隊列獲取結果並將結果保存到數據庫。
問題是如何防止死鎖,例如。 「計算線程」需要知道何時不會有更多的對象被放入隊列。 目前我通過傳遞線程(可調用)的引用來實現此目的,並在poll或offer之前檢查thread.isDone(),然後如果元素爲null。我還檢查隊列的大小,只要有元素,就必須消耗。使用take或put會導致死鎖。
有沒有更簡單的方法來實現這一目標?
可能是一個愚蠢的http://stackoverflow.com/questions/5326013/proper-implementation-of-producer-consumer-scenario-and-graceful-termination-of – 2011-09-06 05:19:45