メインスレッドから3つのワーカースレッドがあります。メインスレッドはオブジェクトをBlockingQueueに配置します。キューに十分なデータがない場合は、オブジェクトを1つだけとしましょう。他の2つのスレッドは待機状態を維持します。( queue.take()の呼び出しのために)他の2つの待機中のスレッドに終了するように通知するにはどうすればよいですか?
これを行う1つの方法は、キューの最後のダーティオブジェクトを渡して、他の古いスレッドを読み取って終了させることです。他に利用できるエレガントなソリューションはありますか?
public void run() {
if (log.isInfoEnabled()) {
log.info("Entering method 'run' " + this.getName());
}
try {
while (!noMoreData || !queue.isEmpty()) {
String data = queue.take();
...
...
doSomething();
}
if (log.isInfoEnabled()) {
log.info("noMoreData =" + noMoreData + ", queue empty=" + queue.isEmpty() + "....Terminating thread..." + this.getName());
}
} catch (InterruptedException ie) {
log.error(ie);
} finally {
//DONE SIGNAL
doneSignal.countDown();
log.info(this.getName() + " finished.");
}
}