在运行 Java 1.7.0_09 的双核 Windows 2008 64 位服务器上进行 3000 个并发 session 和每秒大约 300 个事务的负载测试期间,我们在实践中观察到两个已确认的虚假唤醒实例,即退出其 wait() 方法的线程未收到通知且在等待超时到期之前。
在唤醒期间,机器 CPU 使用率低于 20%,并且有足够的内存可用。也没有观察到过多的垃圾收集。 幸运的是,我们最近引入的自旋锁能够捕获这种情况并继续 wait()
虚假唤醒现象记录在 java.lang.Object wait() 的 JavaDoc 中,但这是我第一次在实践中真正看到它。 这是 Windows 或 Java 中的错误吗?
最佳答案
因为它被记录在案,所以它不可能是一个错误。
关于java - 虚假唤醒在实践中发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14108155/