//引用t1线程等待t1线程执行完 //引用t2線程,等待t2线程执行完
主要是使用了join()方法
看看jdk的join方法是洳何实现的吧
问题:现在有T1、T2、三个线程你怎样保证T2在T1执行完后执行,在T2执行完后执行
实现:使用Thread中的join方法实现
Thread
类中的join
方法是用来同步的底层其实是调用了 wait
方法。先来看一下演示玳码:
可以看到我们让t2
线程调用t1.join
,调用
t2.join
,尽管是t2,t1分別start执行顺序还是t1,t2。是因为join
方法底层使用的是wait
方法
1)从源码中我们结合之前的代码分析,t2.join()
和.join()
,均没有传值相当于join(0)
,表示不计时间,t2
会一直wait
等待t1
执行完成会一直
wait
等待t2
执行完成。所以执行结果顺序是t2,t1
2)当传入的毫秒值不为0时,就一直循环等待直到过了等待时间(dalay<=0),则执行break方法那么将不再等待。
join()
传入的毫秒值查看执行顺序並分析结果:
线程3 //程序启动过了2秒执行
分析:我们让t1
睡眠8秒模拟业务执行时间t2等待t1 的时间为4秒,等待t2的时间为2秒那么当t1,t2启动后,等待的时间会因为t2的等待时间4秒太长而先与t2执行,t2会因为t1的8秒太长而先与t1执行