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