从Java中的synchronized上下文调用Thread.sleep()
我已经读过Thread.sleep()
将暂停当前运行的线程指定的时间,然后它返回到runnable状态,等待轮到它运行。
此外,如果从synchronized
上下文调用, sleep()
不会释放它所持有的锁。 所以我想知道什么时候会释放锁。 如果线程处于hibernate状态,永远不会有机会运行,那么它将始终保持锁定自身,然后其他线程如何进入同步方法/块。
我不确定我是否在问有效的问题。 但请帮帮我。
所以我想知道什么时候会释放锁。
它将在从synchronized
块退出时释放锁定,而不是更早。
如果线程处于hibernate状态,永远不会有机会运行,那么它将始终保持锁定自身,然后其他线程如何进入同步方法/块。
很简单,其他线程将无法输入与睡眠线程相同的对象上同步的代码。
总而言之,从synchronized
块调用Thread.sleep()
可能不是一个好主意。
如果使用Object.wait
而不是Thread.sleep
,则将释放来自synchronized块的锁定。