实际中会出现虚假唤醒问题

5
在一个双四核 Windows 2008 64 位服务器上运行 Java 1.7.0_09,模拟了 3000 个并发会话和大约每秒 300 次事务的负载测试。在实际操作中,我们观察到两个确认的虚假唤醒实例,即线程在未被通知且等待超时之前退出其 wait() 方法。
在唤醒期间,机器 CPU 利用率低于 20%,有大量可用内存。也没有观察到过度垃圾回收。幸运的是,我们最近引入的自旋锁能够捕获此条件并继续等待()。
虚假唤醒现象在 java.lang.Object wait() 的 JavaDoc 中有记录,但这是我第一次在实践中看到它。这是 Windows 还是 Java 中的 bug?

在哪个操作系统版本上?我问这个问题是因为,在Windows上几十年的多线程编程中,我从未见过任何来自任何OS同步原语(事件、信号量)的虚假唤醒,我认为Java运行时使用它们来提供“等待”功能。 - Martin James
Windows 2008 64位,这也是我第一次在实践中看到这个理论现象。 - lyaffe
可能是Windows上的虚假唤醒。这可能吗?的重复问题。 - Erwin Bolwidt
1个回答

3

既然有文档记录,那么就不可能是一个bug。


好的,我只是想分享我的发现并获得一些反馈。 - lyaffe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接