我有来自主线程的三个工作线程。主线程将对象放入BlockingQueue。如果队列没有足够的数据,可以说只有一个对象。其他两个线程保持等待状态。我如何通知其他两个等待线程(因为调用 queue.take())终止?
一种方法是将队列中的最后一个脏对象传递给其他过时的线程来读取和终止。还有其他优雅的解决方案吗?
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.");
}
}