这个问题不是关于虚假唤醒是否真的发生,因为这已经在这里进行了详细讨论:Java 中的虚假唤醒真的会发生吗? https://stackoverflow.com/questions/1050592/do-spurious-wakeups-actually-happen因此,这也不是关于为什么我必须在我的周围放置一个循环wait
陈述。这是关于什么的:
我想构造一个案例,其中发生虚假唤醒。到目前为止,我在上面链接的问题中学到的是:
如果 Linux 进程收到信号,其等待线程将各自享受一个
美好的、热的虚假唤醒。
所以看来这只适用于 Linux 机器,事实上我有 Ubuntu 11.04 - 64 位。我编写了一个 Java 程序,其中一个线程等待条件,但没有循环,另一个类中的线程只是等待并得到另一个线程的通知。我认为在一个 JVM 中启动所有三个线程会强制出现上述情况,但情况似乎并非如此。
还有其他人知道如何用 Java 构建这样的案例吗?
你不能强制虚假唤醒,但对于正在运行的线程来说,虚假唤醒与常规唤醒没有区别(事件源不同,但事件本身是相同的)
要模拟虚假唤醒,只需调用notify() http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#notify();
Calling interrupt()
不合适,因为这样做会设置中断标志,并且在虚假唤醒后,中断标志为not set
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)