我有一個包含工作項的隊列,我希望多個線程在這些項目上並行工作。 處理工作項目時,可能會產生新的工作項目。我遇到的問題是,我無法找到解決辦法,如何確定我是否完成。工人看起來是這樣的:如何處理可能會創建新工作項的多個工作線程
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