正確使用Java讀寫鎖

JDK8中引入了高性能的讀寫鎖StampedLock,它的核心思想在於,在讀的時候若是發生了寫,應該經過重試的方式來獲取新的值,而不該該阻塞寫操做。這種模式也就是典型的無鎖編程思想,和CAS自旋的思想同樣。這種操做方式決定了StampedLock在讀線程很是多而寫線程很是少的場景下很是適用,同時還避免了寫飢餓狀況的發生。html

來自 <http://www.javashuo.com/article/p-byhwfgza-hw.html>編程

隨着原生的Synchronized 不斷優化,如上文測試那樣大部分場景下它的性能都接近甚至超越讀寫鎖。不過要注意這些優化都有個前提就是大部分場景下線程同步區執行時間很短,樂觀鎖不會升級爲悲觀鎖,因此它能有很好的性能,若是在特殊場景每次鎖都會升級爲重量級鎖性能反而會更差些。正如StampedLock對讀寫鎖的改進同樣,若是在某些場景CAS自旋不成功,它性能反而會更差。性能

讀寫鎖的應用場景可參考下面這個測試說明,測試

相關文章
相關標籤/搜索