据我了解,内部obj.join()
调用wait()
.这意味着join()
始终释放锁(因为wait()
在调用后总是释放锁).
API文档解释说:
此实现使用一系列
this.wait
调用条件this.isAlive
.当一个线程终止时,该this.notifyAll
方法被调用.建议应用程序无法使用wait
,notify
或notifyAll
在Thread
实例.
人们在这里SO说,join()
不会释放任何锁定,因为API没有提到它明确.但这种逻辑对我来说似乎很奇怪.
这是join()
代码中的主要逻辑:
while (isAlive()) {
wait(0);
}
Run Code Online (Sandbox Code Playgroud)
这个网站进一步增加了混乱(我认为他们错了):
3)
wait()
和join()
方法之间的第三个区别是,当一个线程调用该wait()
方法时,它释放为wait()
被调用的对象保留的任何锁,但是调用该join()
方法不会释放任何监视器或锁.