join
问:当有三个线程 T1,T2,T3,如何确保t2在t1后执行,t3在t2后执行?
答:如果想让线程按照顺序执行,需要使用到join方法。
public class Main {
public static void main(String[] args) {
MyThread T1 = new MyThread("A");
MyThread T2 = new MyThread("B");
MyThread T3 = new MyThread("C");
T1.start();
T1.join();
T2.start();
T2.join();
T3.start();
T3.join();
}
}
class MyThread extends Thread {
private String name;
public MyThread(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name+":"+i);
}
}
}
join方法的所用:
1:Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。
2:当我们调用某个线程的这个方法时, 这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行。
join方法中传递参数和不传递参数的区别?
- join方法中传入参数:
T1.start();
T1.join(10);
T2.start();
- 当join中传递参数,join(10);说明T2线程等待T1线程10秒,在这10秒之内是同步操作,10秒之后T1和T2线程就是异步操作。
- 注意:
- 如果是join(0),不是说等待0秒,而是无限等待,知道T1线程执行完毕,才能执行T2线程。