gpt4 book ai didi

java - 为什么总是在循环中调用 wait()

转载 作者:IT老高 更新时间:2023-10-28 20:21:06 24 4
gpt4 key购买 nike

我读到我们应该总是在循环中调用 wait():

while (!condition) { obj.wait(); }

没有循环也能正常工作,这是为什么呢?

最佳答案

您不仅需要循环它,还需要检查循环中的条件。 Java 不保证您的线程只会被 notify()/notifyAll() 调用或正确的 notify()/notifyAll() 调用唤醒。由于此属性,无循环版本可能会在您的开发环境中运行,而在生产环境中可能会意外失败。

例如,您正在等待某事:

synchronized (theObjectYouAreWaitingOn) {
while (!carryOn) {
theObjectYouAreWaitingOn.wait();
}
}

一条邪恶的线索出现并且:

theObjectYouAreWaitingOn.notifyAll();

如果邪恶线程没有/不能弄乱 carryOn 你只需继续等待正确的客户端。

编辑:添加了更多示例。可以中断等待。它抛出 InterruptedException 并且您可能需要将等待包装在 try-catch 中。根据您的业务需求,您可以退出或抑制异常并继续等待。

关于java - 为什么总是在循环中调用 wait(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1038007/

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