在运行 Java 1.7.0_09 的双四核 Windows 2008 64 位服务器上进行 3000 个并发会话和每秒大约 300 个事务的负载测试期间,我们在实践中观察到两个已确认的虚假唤醒实例,即线程退出其 wait() 方法而没有得到通知在等待超时到期之前。
在唤醒期间,机器 CPU 低于 20%,并且有足够的内存可用。也没有观察到过多的垃圾收集。幸运的是,我们最近引入的自旋锁能够捕获这种情况并继续等待()
虚假唤醒现象记录在 java.lang.Object wait() 的 JavaDoc 中,但这是我第一次在实践中真正看到它。这是 Windows 还是 Java 中的错误?