2016-07-06 12 views
0

私のコードで5つ以上のスレッドを使用しています。メインメソッドが実行されると、すべてのスレッドが最初に呼び出されます。すべてのスレッドがアクティブになったら、すべての子スレッドが停止するまでメインスレッドを停止します。メソッドを使用すると、他のすべての子メソッドも停止しています。私の場合は、メインスレッドだけを一時停止する必要があります。すべての子スレッドが完了するまでメインスレッドを待機させる方法は?

+3

あなたはいくつかのコードに入れることはできワーカースレッドのためにメインスレッド

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 

について

を?どのようにして結合メソッドを呼び出すのかを見たいと思います。ジョイン方法は、あなたがしたいことを達成するための最良の方法です。おそらくそれは動作しないために何か間違っている必要があります。 –

+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使用する必要があります。

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 
     } 
    } 
関連する問題