在java中进行线程等待

时间:2015-04-24 06:58:55

标签: java multithreading

例如,我总共有5个线程,主线程(A)和04个其他子线程(B,C,D,E)。我想要的是线程E需要等到线程B,C完成它们的工作。我打算使用join(),但似乎主线程也会被阻塞。我需要主线程,线程D可以继续运行,而线程E正在等待线程B和C.
我不知道如何以正确的方式实现这一点。如果有人可以提供帮助,那就太棒了。
非常感谢

3 个答案:

答案 0 :(得分:1)

您可以使用CountDownLatch

类CountDownLatch

java.lang.Object
java.util.concurrent.CountDownLatch
public class CountDownLatch
extends Object

允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。

例如:

下面是一个完成信号,允许驾驶员等到所有工人都完成 -

    class Worker implements Runnable {
   private final CountDownLatch startSignal;
   private final CountDownLatch doneSignal;
   Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
     this.startSignal = startSignal;
     this.doneSignal = doneSignal;
   }
   public void run() {
     try {
       startSignal.await();
       doWork();
       doneSignal.countDown();
     } catch (InterruptedException ex) {} // return;
   }

   void doWork() { ... }
 }

答案 1 :(得分:0)

许多可能性,例如CountDownLatch,或者您可以将join()调用放入线程E的run()方法中。

答案 2 :(得分:0)

我能想到的最好的方法是将一个Object传递给线程B,C和E并等待它直到B和C都完成。

在线程E中,您应该有2条等待线:

lockObj.wait();
lockObj.wait();

线程B和C都应以lockObj.notify();

结尾

我没有对此进行过测试,但理论上它应该可行。