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

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

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

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


答案 1

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

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

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

很简单,其他线程将无法输入在休眠线程的同一对象上同步的代码。

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


答案 2

如果使用 代替 ,则将释放来自同步块的锁。Object.waitThread.sleep