synchronized鎖的升級

Leon_Jinhai_Sun發表於2020-12-20

在分析markword時,提到了偏向鎖、輕量級鎖、重量級鎖。在分析這幾種鎖的區別時,我們先來思考一個問題

使用鎖能夠實現資料的安全性,但是會帶來效能的下降。不使用鎖能夠基於執行緒並行提升程式效能,但是卻不能保證執行緒安全性。這兩者之間似乎是沒有辦法達到既能滿足效能也能滿足安全性的要求。

hotspot虛擬機器的作者經過調查發現,大部分情況下,加鎖的程式碼不僅僅不存在多執行緒競爭,而且總是由同一個執行緒多次獲得。所以基於這樣一個概率,是的synchronized在JDK1.6之後做了一些優化,為了減少獲得鎖和釋放鎖帶來的效能開銷,引入了偏向鎖、輕量級鎖的概念。因此大家會發現在synchronized中,鎖存在四種狀態

分別是:無鎖、偏向鎖、輕量級鎖、重量級鎖; 鎖的狀態根據競爭激烈的程度從低到高不斷升級

 

相關文章