2013-01-01 91 views
4

在運行Java 1.7.0_09的Dual Quad核心Windows 2008 64位服務器上進行具有3000個併發會話和每秒約300個事務的負載測試期間,我們在實踐中觀察到兩個確認的虛假喚醒實例,即退出的線程他們的wait()方法沒有被通知,並且在等待超時過期之前。在實踐中發生虛假喚醒

在喚醒期間,機器的CPU不到20%,並且有足夠的內存可用。也沒有觀察到過多的垃圾收集。 幸運的是,我們最近推出的自旋鎖能夠捕獲這種情況並繼續等待(),但它是我第一次實際上第一次在java.lang.Object wait()的JavaDoc中記錄了虛假喚醒現象在實踐中看到它。 這是Windows或Java中的錯誤嗎?

+0

在哪個OS版本上?我問,因爲在Windows上數十年的多線程處理中,我從未見過任何OS同步原語(事件,信號量)的虛假喚醒,我認爲java運行時使用它來提供「等待」功能。 –

+0

Windows 2008 64位,這也是我第一次在實踐中看到這個理論現象。 – lyaffe

+0

[窗戶上的虛假喚醒可能重複。這是可能的嗎?](http://stackoverflow.com/questions/23296260/spurious-wakeups-on-windows-is-it-possible) –

回答

3

由於它被記錄,它不能是一個錯誤。

+0

好吧,我只是想分享我的發現並獲得一些反饋 – lyaffe