南京达内IT培训
美国上市IT培训机构

025-66630866

热门课程

Java线程的join方法

  • 时间:2016-06-16 18:01
  • 发布:南京达内培训学校
  • 来源:企业面试题

南京达内培训讲师表示,Java线程的join方法可用于暂停当前线程的执行直至目标线程死亡。Thread中一共有三个join的重载方法。

public final void join():该方法将当前线程放入等待队列中,直至被它调用的线程死亡为止。如果该线程被中断,则会抛出InterruptedException异常。

public final synchronized void join(long millis):该方法用于让当前线程进入等待状态,直至被它调用的线程死亡或是经过millis毫秒。由于线程的执行依赖于操作系统,所以该方法无法保证当前线程等待的时间和指定时间一致。

public final synchronized void join(long millis, int nanos):该方法用于让线程暂停millis毫秒nanos纳秒。

下面的例子演示了join方法的使用。该段代码的目的是确保main线程最后结束,并且仅当第一个线程死亡才能启动第三个线程。

ThreadJoinExample.java
package com.journaldev.threads;
public class ThreadJoinExample {
  Thread t1 = new Thread(new MyRunnable(), t1);
  Thread t2 = new Thread(new MyRunnable(), t2);
  Thread t3 = new Thread(new MyRunnable(), t3);
  t1.start();
  //start second thread after waiting for 2 seconds or if it's dead
  try {
    t1.join(2000);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  t2.start();
  //start third thread only when first thread is dead
  try {
    t1.join();
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  t3.start();
  //let all threads finish execution before finishing main thread
  try {
    t1.join();
    t2.join();
    t3.join();
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  System.out.println(All threads are dead, exiting main thread);
}
class MyRunnable implements Runnable {
  @Override
  public void run() {
    System.out.println(Thread started::: + Thread.currentThread.getName());
    try {
      Thread.sleep(4000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println(Thread ended::: +Thread.currentThread.getName());
  }
}

上述程序的输出结果为:

Thread started:::t1

Thread started:::t2

Thread ended:::t1

Thread started:::t3

Thread ended:::t2

Thread ended:::t3

All threads are dead, exiting main thread
上一篇:java中使用Map中常见问题解答
下一篇:Java内存模型常见问题解析
选择城市和中心
贵州省

广西省

海南省