Java 在实践中会出现虚假唤醒
在运行Java 1.7.0_09的双四核Windows 2008 64位服务器上进行每秒3000个并发会话和大约300个事务的负载测试期间,我们在实践中观察到两个已确认的虚假唤醒实例,即线程在未收到通知的情况下,在等待超时过期之前退出其wait()方法 在唤醒期间,机器CPU不足20%,内存充足。此外,未观察到过多的垃圾收集。 幸运的是,我们最近引入的自旋锁能够捕获这种情况并继续等待() 伪唤醒现象记录在java.lang.Object wait()的JavaDoc中,但这是我第一次在实践中看到它。Java 在实践中会出现虚假唤醒,java,windows,multithreading,Java,Windows,Multithreading,在运行Java 1.7.0_09的双四核Windows 2008 64位服务器上进行每秒3000个并发会话和大约300个事务的负载测试期间,我们在实践中观察到两个已确认的虚假唤醒实例,即线程在未收到通知的情况下,在等待超时过期之前退出其wait()方法 在唤醒期间,机器CPU不足20%,内存充足。此外,未观察到过多的垃圾收集。 幸运的是,我们最近引入的自旋锁能够捕获这种情况并继续等待() 伪唤醒现象记录在java.lang.Object wait()的JavaDoc中,但这是我第一次在实践中看到
这是Windows还是Java中的一个bug?因为它是有文档记录的,所以它不可能是bug。好吧,好吧,我只是想分享我的发现,并获得关于哪个操作系统版本的反馈?我这样问是因为,在Windows上几十年的多线程处理中,我从未见过任何来自任何操作系统同步原语(事件、信号量)的虚假唤醒,我假设java运行时使用这些原语来提供“等待”功能。Windows 2008 64位,这也是我第一次在实践中实际看到这种理论现象