假设我有一个保存SlaveThread对象列表的主设备。在每个时间步中,我希望主设备并行运行SlaveThreads,但是,在时间步结束时,我希望SlaveThreads在向前推进之前等待对方完成当前时间步。另外,我不想在每个时间步骤重新实例化SlaveThreads。我有两种可能的解决方案,我不知道如何使它们中的任何一个都工作:Java - 在时间基础上同步多个线程
1)SlaveThread中的run()方法在while(true)循环中。在SlaveThread一个循环的执行后,我会SlaveThread通知主(我不知道该怎么做),主做类似
try{
for (int i = 0; i < numSlaveThreads; i++) {
while (!slaveThreads[i].getCompletedThisIter()) {
wait()
}
}
System.out.println("Joined");
}
前推进到下一个时间步骤。我将如何做到这一点?我怎么能有一个单独的SlaveThread通知主人?
2)Slave中的run()不在while(true)循环中,那么我必须在每次迭代时调用start()。但是此时Slave的线程状态将被终止。如何在不重新实例化的情况下再次调用start()?
听起来就像你想要一个循环障碍:http://docs.oracle.com/javase/7/docs/api /java/util/concurrent/CyclicBarrier.html(使用变体1) – millimoose 2012-07-22 17:51:07