Java线程连接示例

时间:2020-02-23 14:36:57  来源:igfitidea点击:

Java Thread join方法可用于暂停当前线程执行,直到指定的线程死亡为止。
有三个重载的联接函数。

Java线程连接

public final void join():此Java线程连接方法将当前线程置于等待状态,直到调用该线程的线程失效为止。
如果线程被中断,则抛出InterruptedException。

公共最终同步的void join(long millis):此java线程连接方法用于等待调用它的线程失效或者等待指定的毫秒数。
由于线程执行取决于操作系统的实现,因此不能保证当前线程将仅等待给定时间。

公共最终同步void连接(long millis,int纳米):此java线程连接方法用于等待线程死给定的毫秒数与十亿分之一秒。

这是一个简单的示例,显示了线程连接方法的用法。
该程序的目标是确保main是最后一个线程完成而第三个线程仅在第一个线程死时才启动。

package com.theitroad.threads;

public class ThreadJoinExample {

  public static void main(String[] args) {
      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) {
          //TODO Auto-generated catch block
          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