【发布时间】:2011-12-31 23:30:43
【问题描述】:
这是一个线程正在等待 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 之后可用。
提前致谢。
【问题讨论】:
-
Bringer128 有一个合理的解决方案,但是,我质疑你为什么要这样做。中断通常不是“虚假唤醒”,它是中断和停止进程的信号。
-
这与中断无关。 “虚假唤醒”随时可能出现。如果它在我进入等待()之后同时出现,那么我不想退出循环。我需要确保在退出循环之前至少等待
timeout时间 -
我明白了。你没有被打断,但是其他一些线程正在调用 notify(),或者更有可能是 notifyAll(),你会被唤醒。
标签: java multithreading wait