私が直面する問題は、スレッドAとnの作業が必要です。スレッドAは、この作業が完全に完了するまで待たなければなりません。私の考えは、nカウントでCountDownLatch
を使用し、生産者/消費者パターンを使用して作業者を制御しています。プロダクト、コンシューマー、カウンターが正確にn回実行されるのを待ちます。
私はをカウンタとして使用します:プロデューサは、カウンタ値が0より大きいかどうかをチェックし、BlockingQueue
に信号を入力します。カウンタ値が0以下の場合、プロデューサはstopSignalをキュー。コンシューマは、キューからシグナルがstopSignalと等しくないかどうかをチェックし、ExecutorService
を使用してWorker
をスケジュールします。
ワーカーコールgetAndDecrement
と作業が行われている場合はい、その後の仕事、 はそれは問題がある他たCountDownLatch番号のカウントダウンがincrementAndGet
でカウンターを増やす呼び出すない場合、カウンタの値が、0以上であるかどうかをチェック作業が完了していない場合、作業者はカウンタを増やす必要がありますが、これはgetAndDecrement
の後です。プロデューサはカウンタの値が0であると見て、作業の合計がn未満であっても停止信号を出します。
ちょうど* n *スレッドを起動してそれらを 'join()'することはできませんか?かもしれないだけ。 – 9000
私は傾けることができます。 – robinmag