Java:如何在wait()中区分虚假唤醒和超时
这是线程正在等待notify()或超时的情况。这里添加了while循环来处理虚假唤醒。
boolean dosleep = true;while (dosleep){
try {
wait(2000);
/**
* Write some code here so that
* if it is spurious wakeup, go back and sleep.
* or if it is timeout, get out of the loop.
*/
} catch (InterruptedException e) {
e.printStackTrace();
}
}
在这种情况下,如何区分虚假唤醒和超时?如果是虚假的唤醒,我需要回去等待。如果超时,我需要退出循环。
我可以轻松识别出notify()的情况,因为我将在notify()调用时将dosleep变量设置为false。
编辑:由于嵌入式项目的要求,我正在使用1.4 Java版本。我无法使用,Condition
因为它仅在1.5后可用。
提前致谢。
回答:
如果要区分这两种情况,则需要保持超时。
long timeout = 2000;long timeoutExpires = System.currentTimeMillis() + timeout;
while(dosleep) {
wait(timeout);
if(System.currentTimeMillis() >= timeoutExpires) {
// Get out of loop
break;
}
}
也就是说,丹尼斯建议使用Condition
该类是执行此操作的更好方法。
以上是 Java:如何在wait()中区分虚假唤醒和超时 的全部内容, 来源链接: utcz.com/qa/401973.html