2016-07-06 206 views
0

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

+3

你可以把一些代码?我想看看你是怎么称呼连接方法的。连接方法是实现你想要做的最好的方法。你可能必须做一些错误的工作。 –

+3

'如果我对任何线程使用join()方法,那么所有其他子方法也会暂停,否则其他线程不应该暂停。看起来你做错了什么。 – TomN

回答

3

在所有线程都已启动后,您需要join。即:

for(int i = 0; i < numThreads; i++) { 
    threads[i].start(); 
} 

才把:

for(int i = 0; i < numThreads; i++) { 
    threads[i].join(); 
} 

以上会工作。

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