我有一个类,它产生了一堆线程,必须等到所有衍生线程完成。 (我需要计算所有线程完成的时间)。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