1. Thread.join
方法的作用
方法
join
的作用是 使所属的线程对象正常执行run()
方法中的任务, 而使当前线程进行无限期(或指定时间)的阻塞, 等待方法join
所属线程销毁后再继续执行当前线程后续的代码;
2. Thread.join
方法的实现细节
具体实现细节如下图:
注意到jdk源码中并没有出现
Thread.join
方法所属线程对象主动通知(即调用notify
或notifyAll
方法)来唤醒被阻塞的"当前线程", 而是在所属线程执行完毕(即运行完run()
方法)后调用指定的本地方法来做收尾工作, 其中就包括唤醒在这个线程对象上wait的所有线程;
3. 方法 join(long)
与 sleep(long)
的区别
join(long)
与 sleep(long)
方法的区别在于: join(long)
方法会释放所持有的对象锁, 而 sleep(long)
方法不会释放所持有的对象锁;