gpt4 book ai didi

java - 与线程的 wait 和 Sleep 方法混淆

转载 作者:行者123 更新时间:2023-11-30 07:06:35 24 4
gpt4 key购买 nike

sleep() 维护锁但 wait() 不维护锁,

我对 wait 的想法是释放锁,让其他线程有机会在他等待时获取该线程上的监视器。

但对 sleep() 有疑问 为什么线程在 hibernate 时保持锁,因为它总是在 hibernate 后进入可运行状态

最佳答案

为什么线程在 sleep 时保持锁,因为它总是在 sleep 后进入可运行状态

考虑以下场景:-

private Object objLock = new Object();

public void myMethod() {
....
synchronized(objLock) {

Thread.sleep(1000); // make the current running thread sleep for 1 second only.
... // Code here which needs to be executed immediately after 1 second sleep time
}
....
}

如果在上面的代码中调用 sleep 时 JVM 释放了锁,那么当它返回到可运行状态时(恢复执行将取决于调度和根据 JLS Sleep 执行线程的处理器的可用性) ) 如果另一个线程偶然获得了一个锁,你的程序可能根本无法恢复,这会使程序行为不一致。这可能是它不释放任何锁的原因之一。

关于java - 与线程的 wait 和 Sleep 方法混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25573327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com