を完了し、私は次のような状況があります。データベース 生産者 - 消費者:どのようにprodcutionを知らせる知っている
- 読み出しデータは、作業「計算」を行う
- 書き込み結果データベース
私はデータベースから読み込み、生成されたオブジェクトをBlockingQueueに格納するスレッドを持っています。これらのオブジェクトは非常に重いので、メモリ内のオブジェクトの量を制限するキューです。 複数のスレッドがキューからオブジェクトを取り出し、作業を実行して結果を2番目のキューに入れます。 最終スレッドは2番目のキューから結果を取り出し、結果をデータベースに保存します。
デッドロックを防ぐ方法が問題です。 「計算スレッド」は、それ以上オブジェクトがキューに入れられないときを知る必要があります。 現在、スレッド(呼び出し可能)の参照をお互いに渡し、ポーリングまたはオファーの前にthread.isDone()をチェックし、要素がnullの場合にこれを実現します。キューのサイズもチェックします。要素がある限り、消費する必要があります。 takeまたはputを使用するとデッドロックが発生します。
これを実現する簡単な方法はありますか?
は、http://stackoverflow.com/questions/5326013/proper-implementation-of-producer-consumer-scenario-and-graceful-termination-ofの欺瞞である可能性があります –