掃盲----Synchronized原理

Synchronized初級原理:同步鎖的核心是monitor(計數器),monitor是在同步代碼前後加入monitorenter和monitorexit指令,monitorenter表示計數器+1,monitorexit表示計數器-1,當monitor計數器等於0的時,允許有且只有一個線程進行訪問,具備排他性。

Synchronized是如何保證可重入的?

當同步重入一個對象時,還是關聯同一個對象的monitor裏的monitor,只不過重新執行一遍monitor指令而已。

Synchronized鎖優化:

jdk1.6之後JVM針對Synchronized進行鎖升級

1、Synchronized針對多線程無競爭的情況下,加入偏斜鎖優化。

2、Synchronized針對多線程有競爭的情況下(個人理解:多線程低競爭的時候),偏斜鎖撤銷,會升級爲輕量級優化。

3、Synchronized針對多線程多競爭情況下(個人理解:多線程高競爭的時候),輕量級鎖會進入自旋鎖優化過程,這個過程出現更新失敗而不斷的自旋時,將進入重量級鎖過程。

個人猜想:Synchronized的針對偏斜鎖和輕量級鎖使用了cas無鎖優化,而進入重量級鎖之後,應該是一個真正的互斥獨佔過程。

參考 :https://blog.csdn.net/baidu_38083619/article/details/82527461

            https://www.jianshu.com/p/d61f294ac1a6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章