在Java中的併發實踐中,作者寫道:是否有任何JVM實現用旋轉等待進行阻塞?
當鎖定競爭時,必須阻塞失敗的線程。在JVM可以實現經由旋等待(反覆嘗試,直到它成功獲取鎖)或通過懸浮通過操作系統被阻塞的線程阻塞任。 效率更高取決於上下文切換開銷與直到鎖定可用的時間之間的關係;對於短等待來說,自旋等待是優選的,並且對於長期等待來說懸置是優選的。 一些JVM根據過去等待時間的分析數據自適應地選擇,但大多數只是掛起等待鎖定的線程。
當我讀到這個時,我很驚訝。是否有任何已知的JVM在執行旋轉等待或者由於性能分析結果有時需要旋轉等待時實現阻塞?現在很難相信。
我不知道如何在JVM中使用,但是Windows在'CRITICAL_SECTION'對象的多核系統上實現自適應螺旋鎖。 – msandiford 2011-06-13 01:24:52
是的,據我所知,正常的同步關鍵字使用自旋鎖來修改服務員。有impl可以旋轉幾秒鐘(只要你有足夠的內核,沒關係) – bestsss 2011-06-13 10:28:55