概念
join作用是让其他线程变为等待,t1.join();//让其他线程变为等待,直到当前t1线程执行完毕,才释放。thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
API
public final void join() throws InterruptedException;
public final synchronized void join(long millis) throws InterruptedException;
第1个方法表示无限等待,它会一直只是当前线程。知道目标线程执行完毕。
第2个方法有个参数,用于指定等待时间,如果超过了给定的时间目标线程还在执行,当前线程也会停止等待,而继续往下执行。
比如:线程T1需要等待T2、T3完成之后才能继续执行,那么在T1线程中需要分别调用T2和T3的join()方法。
使用
用户线程和主线程例子:
/**
* 测试线程阻塞 (join:等待该线程终止。)
* @author terry
* @date 2018年2月25日
*/
public class ThreadJoin extends Thread{
@Override
public void run() {
for (int i = 0;i<5;i++) {
System.out.println("threadJoin线程:"+i);
}
}
public static void main(String[] args) throws InterruptedException {
ThreadJoin thread = new ThreadJoin();
thread.start();
for (int i = 0;i<5;i++) {
// 将threadJoin线程执行完
if (i == 1) {
thread.join();
}
System.out.println("main线程:"+i);
}
}
}
在没调用join之前,线程跑的是不规律的
threadJoin线程:0
main线程:0
threadJoin线程:1
threadJoin线程:2
threadJoin线程:3
threadJoin线程:4
main线程:1
main线程:2
main线程:3
main线程:4