JDK8中引入了高性能的讀寫鎖StampedLock,它的核心思想在於,在讀的時候如果發生了寫,應該通過重試的方式來獲取新的值,而不應該阻塞寫操作。這種模式也就是典型的無鎖編程思想,和CAS自旋的思想一樣。這種操作方式決定了StampedLock在讀線程非常多而寫線程非常少的場景下非常適用,同時還避免了寫飢餓情況的發生。
來自 <https://www.cnblogs.com/konck/p/9691538.html>
隨着原生的Synchronized 不斷優化,如上文測試那樣大部分場景下它的性能都接近甚至超越讀寫鎖。不過要注意這些優化都有個前提就是大部分場景下線程同步區執行時間很短,樂觀鎖不會升級為悲觀鎖,所以它能有很好的性能,如果在特殊場景每次鎖都會升級為重量級鎖性能反而會更差些。正如StampedLock對讀寫鎖的改進一樣,如果在某些場景CAS自旋不成功,它性能反而會更差。
讀寫鎖的應用場景可參考下面這個測試說明,
