【发布时间】:2011-07-02 01:08:51
【问题描述】:
我有一个包含工作项的队列,我希望多个线程在这些项上并行工作。 处理工作项时,可能会产生新的工作项。我遇到的问题是我找不到如何确定是否完成的解决方案。工人看起来像这样:
public class Worker implements Runnable {
public void run() {
while (true) {
WorkItem item = queue.nextItem();
if (item != null) {
processItem(item);
}
else {
// the queue is empty, but there may still be other workers
// processing items which may result in new work items
// how to determine if the work is completely done?
}
}
}
}
这实际上似乎是一个非常简单的问题,但我不知所措。实现它的最佳方式是什么?
谢谢
说明: 一旦没有一个工作线程正在处理某个项目,工作线程就必须终止,但只要其中至少一个仍在工作,它们就必须等待,因为这可能会导致新的工作项目。
【问题讨论】:
-
通常你会等待某种同步对象,每当有新项目添加到队列中时都会通知。
标签: java concurrency