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

时间:2012-05-19 09:19:29

标签: java multithreading synchronized thread-sleep

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

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

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

2 个答案:

答案 0 :(得分:17)

  

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

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

  

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

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

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

答案 1 :(得分:16)

如果您使用Object.wait而不是Thread.sleep,则会释放来自同步块的锁定。