我在代码中使用超过5个线程一旦主方法执行所有线程在开始时调用,一旦所有线程都处于活动状态,我希望主线程停止,直到所有子线程都死了。如果我使用join( )任何线程的方法然后所有其他子方法也被暂停。在我的情况下,我需要单独暂停主线程。
答案 0 :(得分:3)
在所有线程都已启动后,您需要join
。即:
for(int i = 0; i < numThreads; i++) {
threads[i].start();
}
只有这样:
for(int i = 0; i < numThreads; i++) {
threads[i].join();
}
以上将有效。
答案 1 :(得分:0)
您应该使用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
}
}