2016-07-06 205 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 
     } 
    }