等待线程
有时候我们需要等待其他线程完成后当前线程才可以继续执行。回顾之前的示例可以看到主线程和其他线程是并发运行的,回顾一下1.2中程序执行的日志:
主线程:启动线程
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
主线程:中断线程
主线程:退出
Thread-0:线程被中断。
Thread-0:取得中断信号状态:false
Thread-0:线程退出。
可以看到主线程在其他线程仍然运行的情况下就完成了,如果要求主线程必须等其他线程完成后才能结束该怎么实现?也就是说主线程要等待其他线程完成,线程等待可以使用 join方法,修改后实例如下:
public class JoinWorkThread {
public static void main(String[] args){
JoinWorker worker = new JoinWorker();
Thread t1 = new Thread(worker);
Thread t2 = new Thread(worker);
System.out.println("main:开始启动工作线程");
t1.start();
t2.start();
System.out.println("main:已经启动所有工作线程");
System.out.println("main:等待工作线程");
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main:退出");
}
}
class JoinWorker implements Runnable{
@Override
public void run(){
for(int i=0; i<1000; i++){
if(i%100 == 0){
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
}
运行日志如下:
main:开始启动工作线程
Thread-0:0
Thread-0:100
Thread-0:200
Thread-0:300
Thread-0:400
Thread-0:500
Thread-0:600
Thread-0:700
Thread-0:800
Thread-0:900
main:已经启动所有工作线程
main:等待工作线程
Thread-1:0
Thread-1:100
Thread-1:200
Thread-1:300
Thread-1:400
Thread-1:500
Thread-1:600
Thread-1:700
Thread-1:800
Thread-1:900
main:退出