如何使主线程等到所有子线程完成?

时间:2016-07-06 06:53:12

标签: java multithreading

我在代码中使用超过5个线程一旦主方法执行所有线程在开始时调用,一旦所有线程都处于活动状态,我希望主线程停止,直到所有子线程都死了。如果我使用join( )任何线程的方法然后所有其他子方法也被暂停。在我的情况下,我需要单独暂停主线程。

2 个答案:

答案 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
        }
    }