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

