假設我有一個保存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