假设我有一个保存 SlaveThread 对象列表的 Master。在每个时间步上,我希望 Master 并行运行 SlaveThreads,但是,在时间步长结束时,我希望 SlaveThreads 在前进之前相互等待对方完成当前时间步长。另外,我不想在每个时间步重新实例化 SlaveThreads。我有 2 种可能的解决方案,但我不知道如何使它们中的任何一个起作用:
1) SlaveThread 中的run() 方法处于while(true) 循环中。在 SlaveThread 中执行单个循环后,我会让 SlaveThread 通知 Master(我不知道该怎么做),而 Master 会执行类似的操作
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() ?