1. Thread.join
方法的作用
方法
join
的作用是 使所屬的線程對象正常執(zhí)行run()
方法中的任務(wù), 而使當(dāng)前線程進行無限期(或指定時間)的阻塞, 等待方法join
所屬線程銷毀后再繼續(xù)執(zhí)行當(dāng)前線程后續(xù)的代碼;
2. Thread.join
方法的實現(xiàn)細節(jié)
具體實現(xiàn)細節(jié)如下圖:
注意到jdk源碼中并沒有出現(xiàn)
Thread.join
方法所屬線程對象主動通知(即調(diào)用notify
或notifyAll
方法)來喚醒被阻塞的"當(dāng)前線程", 而是在所屬線程執(zhí)行完畢(即運行完run()
方法)后調(diào)用指定的本地方法來做收尾工作, 其中就包括喚醒在這個線程對象上wait的所有線程;
3. 方法 join(long)
與 sleep(long)
的區(qū)別
join(long)
與 sleep(long)
方法的區(qū)別在于: join(long)
方法會釋放所持有的對象鎖, 而 sleep(long)
方法不會釋放所持有的對象鎖;