synchronized升級過程

辉辉、發表於2024-08-15

1.物件有三個區域

物件頭/例項資料/對其填充

物件頭又包含Mark Word/型別指標->指向方法區/陣列長度

Mark Word如下圖所示

synchronized升級過程

2.偏向鎖

當執行緒首次進入synchronized,他會將物件頭的mark work更新為偏向鎖。

JDK已廢除

3.輕量鎖

當執行緒獲取已被偏向的鎖時,會將鎖升級為輕量鎖。

具體過程是這樣

先將物件頭的mark work複製到執行緒棧中

透過CAS操作,將物件頭的mark work更新指向執行緒棧中的記錄,如果CAS成功(預設自旋15次)則升級為輕量級鎖。

失敗則表示已經其他執行緒操作過了,需要升級為重量級鎖

為什麼要把物件的mark work複製到執行緒棧中,是因為鎖的獲取和釋放都是成對出現的。

當鎖釋放的時候,就需要將原有的執行緒棧mark word恢復到物件頭中。

4.重量級鎖

輕量級鎖CAS操作失敗,就會升級到重量級鎖

相關文章