我有一個類,它產生了一堆線程,必須等到所有衍生線程完成。 (我需要計算所有線程完成的時間)。Java:Multithreading -Wait/notifyAll問題
MainClass產生所有的線程,然後檢查是否所有線程都完成,然後它可以調用自己完成。
此邏輯是否有效。如果是這樣,是否有更好的方法來做到這一點?如果不是,我想更好地理解這種情況。
class MainClass{
private boolean isCompleted;
...
for(task : tasks){
threadpool.execute(task);
}
for(task : tasks){
if(!task.isCompleted()){
task.wait()
}
}
isCompleted = true;
}
class Task{
public void run(){
....
....
synchronized(this){
task.completed = true;
notifyAll();
}
}
}
我認爲你的代碼不起作用,因爲你忘記了'wait()'附近的'synchronized'塊。查看我的答案以獲得更好(更快)的解決方案。 – 2011-06-09 17:30:06
太棒了!正是我在找什麼。我需要至少5分鐘。在我可以關閉它之前。 :) – 2011-06-09 17:31:32