1. 程式人生 > >synchronized關鍵字的實現原理

synchronized關鍵字的實現原理

在java語言規範中,synchronized的功能是通過monitor實現的,

什麼是monitor?

A monitor is mechanism to control concurrent access to an object.
monitor是一種機制,控制多執行緒對一個物件的併發訪問。

java中除了null之外的所有物件都有一個對應monitor,我們知道進入synchronized 程式碼是先要獲得物件的鎖,鎖就monitor,獲得物件的鎖就是獲得monitor物件的使用權,釋放鎖就是釋放monitor物件的使用權。
synchronized所用的鎖存放在Java物件頭裡。即要獲得一個物件的鎖就是修改該物件的物件頭裡面的Mark Wrod 資料,修改成功即獲得鎖。

jdk1.6優化了synchronized,通過引入偏向鎖和輕量級鎖減少獲得鎖和釋放鎖的開銷,優化的思路類似於將之前的重量級鎖按開銷的大小拆分得更細,從偏向鎖–>輕量級鎖–>重量級鎖,鎖在不滿足同步條件的情況下會自動升級,開銷也會越來越大。