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