0
我在我的代碼中使用了超過5個線程,一旦主方法執行完所有的線程在開始時被調用,一旦所有線程都處於活動狀態,我希望主線程停止,直到所有子線程都死亡。如果我使用join()方法的任何線程然後所有其他子方法也得到暫停。在我的情況下,我需要暫停主線程單獨。如何讓主線程等待所有子線程完成?
我在我的代碼中使用了超過5個線程,一旦主方法執行完所有的線程在開始時被調用,一旦所有線程都處於活動狀態,我希望主線程停止,直到所有子線程都死亡。如果我使用join()方法的任何線程然後所有其他子方法也得到暫停。在我的情況下,我需要暫停主線程單獨。如何讓主線程等待所有子線程完成?
在所有線程都已啓動後,您需要join
。即:
for(int i = 0; i < numThreads; i++) {
threads[i].start();
}
才把:
for(int i = 0; i < numThreads; i++) {
threads[i].join();
}
以上會工作。
您應該使用這個CountDownLatch
:
對於主線程
CountDownLatch latch = new CountDownLatch(5); //for 5 threads
for(int i = 0; i < 5; i++) {
new Thread(new Worker("thread " + i, latch)).start();;
}
latch.await(); //wait till all workers are dead
對於工作線程
priavte CountDownLatch;
public Worker(String name, CountDownLatch latch) {
this.name = name;
this.latch = latch;
}
public void run() {
try {
System.out.println(name + " done!");
} finally {
latch.countDown();//count down
}
}
你可以把一些代碼?我想看看你是怎麼稱呼連接方法的。連接方法是實現你想要做的最好的方法。你可能必須做一些錯誤的工作。 –
'如果我對任何線程使用join()方法,那麼所有其他子方法也會暫停,否則其他線程不應該暫停。看起來你做錯了什麼。 – TomN