我有一个包含工作项的队列,我希望多个线程在这些项目上并行工作。 处理工作项目时,可能会产生新的工作项目。我遇到的问题是,我无法找到解决办法,如何确定我是否完成。工人看起来是这样的:如何处理可能会创建新工作项的多个工作线程
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?
}
}
}
}
这似乎是一个非常简单的问题,但实际上我很茫然。什么是最好的实施方式?
感谢
澄清: 工作线程必须终止,一旦他们没有被处理的项目,但只要其中至少有一个是仍在工作,他们必须等待,因为这可能会导致新的工作项目。
通常您会等待某种同步对象,并在每次将新项目添加到队列时收到通知。 – sje397