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