Java中的虚假唤醒真的会发生吗?
2022-08-31 06:01:40
看到各种与锁定相关的问题,并且(几乎)总是找到“由于虚假唤醒而循环”术语1我想知道,是否有人经历过这种唤醒(例如,假设一个体面的硬件/软件环境)?
我知道“虚假”这个词没有明显的原因,但这种事件的原因是什么呢?
(1 注意:我不是在质疑循环练习。
编辑:一个帮助者问题(对于那些喜欢代码示例的人):
如果我有以下程序,并且我运行它:
public class Spurious {
public static void main(String[] args) {
Lock lock = new ReentrantLock();
Condition cond = lock.newCondition();
lock.lock();
try {
try {
cond.await();
System.out.println("Spurious wakeup!");
} catch (InterruptedException ex) {
System.out.println("Just a regular interrupt.");
}
} finally {
lock.unlock();
}
}
}
我能做些什么来虚假地唤醒它,而不必永远等待随机事件?await