从Java中的synchronized上下文调用Thread.sleep()

我已经读过Thread.sleep()将暂停当前运行的线程指定的时间,然后它返回到runnable状态,等待轮到它运行。

此外,如果从synchronized上下文调用, sleep()不会释放它所持有的锁。 所以我想知道什么时候会释放锁。 如果线程处于hibernate状态,永远不会有机会运行,那么它将始终保持锁定自身,然后其他线程如何进入同步方法/块。

我不确定我是否在问有效的问题。 但请帮帮我。

所以我想知道什么时候会释放锁。

它将在从synchronized块退出时释放锁定,而不是更早。

如果线程处于hibernate状态,永远不会有机会运行,那么它将始终保持锁定自身,然后其他线程如何进入同步方法/块。

很简单,其他线程将无法输入与睡眠线程相同的对象上同步的代码。

总而言之,从synchronized块调用Thread.sleep()可能不是一个好主意。

如果使用Object.wait而不是Thread.sleep ,则将释放来自synchronized块的锁定。