同步两个线程

时间:2009-05-16 20:31:49

标签: java multithreading synchronization

我有两个线程,我希望第二个线程等到第一个线程完成。我怎么能做到这一点?

这是我的代码:

public class NewClass1 implements Runnable {

    // in main
    CallMatlab c = new CallMatlab();
    CUI m = new CUI();
    Thread t1 = new Thread(c);
    t1.start();
    Thread t2 = new Thread(m);
    try {
      t1.join();
    } catch (InterruptedException ex) { 
      Logger.getLogger(NewClass1.class.getName()).log(Level.SEVERE, null, ex);
    }
    t2.start();

  //
  public void run() {
    throw new UnsupportedOperationException("Not su..");
  }
}

5 个答案:

答案 0 :(得分:9)

使用Thread.join()方法。从第二个帖子,调用

firstThread.join();

还有可选的重载也需要超时。如果第二个线程在第一个线程完成之前被中断,则需要处理InterruptedException

答案 1 :(得分:4)

您需要致电:

first_thread.join();

来自第二个帖子。

请参阅Thread.join documentation

答案 2 :(得分:1)

只是为了涵盖所有基础知识,您还可以使用信号量。

在服务员

/* spawn thread */
/* Do interesting stuff */
sem.acquire();

在服务员中

/* wake up in the world */
/* do intersting stuff */
sem.release();

如果服务员刚刚终止,这种方法绝不是优越的,但信号量很有意思,所以我觉得值得说明。

答案 3 :(得分:0)

除非你的第一个线程在与第二个线程同时做一些有用的事情,否则你可能最好使用一个线程。如果他们都在做一些有用的事情,请按照建议使用join()。

答案 4 :(得分:0)

您也可以考虑使用java.util.concurrent包。 CountDownLatch或CyclicBarrier可用于协调线程,而Executors可用于管理并发任务。