如何让主线程等待所有子线程完成?
问题描述:
我在我的代码中使用了超过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