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

Ana*_*and 11 java multithreading synchronized thread-sleep

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

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

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

NPE*_*NPE 17

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

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

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

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

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

  • 实际上,调用`Thread.sleep()`根本不是一个好主意.如果你现在可以做些什么,你现在应该做.如果你在做任何事情之前必须等待某事,你应该等待那些事情而不是睡觉. (4认同)
  • @DavidSchwartz:我同意.虽然"Thread.sleep()"有合法用途,但它通常用于不应该使用的地方. (2认同)
  • 解释得很好,但说“总而言之,从同步块调用 Thread.sleep() 可能不是一个好主意。” 走得太远了。有时您想等待并保持锁定。 (2认同)

nos*_*sid 17

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