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

回到顶部