不使用Thread.Join(),我怎样才能实现相同的功能

时间:2013-05-12 15:29:52

标签: java multithreading

我们有两个线程J1和J2。我们如何确保线程J2仅在J1完成执行后才运行,而不使用join()方法。

3 个答案:

答案 0 :(得分:4)

简单,使用CountDownLatch

CountDownLatch中将main()初始化为1。将它传递给J1和J2。 J2只是等待使用await()将Latch变为0。 J2使用countDown()完成后将其设置为0,表示J1开始。

答案 1 :(得分:1)

我认为这与Thread.join正在做的非常接近

public class Test1 {

    public static void main(String[] args) throws Exception {
        Thread t = new Thread();
        synchronized (t) {
            t.start();
            while (t.isAlive()) {
                t.wait();
            }
        }
    }
}

注意魔术 - 某事唤醒了t.wait() - 这是因为JVM在终止时通知了Thread对象

答案 2 :(得分:0)

实现此目标的另一种方法是使用Locks

   class X {
         private final ReentrantLock lock = new ReentrantLock();
          // ...

         public void m() { 
           lock.lock();  // block until condition holds
           try {
              // ... method body
          } finally {
               lock.unlock()
          }
        }
   }