參考
偏向鎖->基本可以確定只有一個線程在執(zhí)行同步塊的時候使用,一旦有了競爭就升級為輕量級鎖斧拍,升級為輕量級鎖的代價挺大雀扶,這種情況下要禁用。
偏向鎖是在無鎖爭用的情況下使用的肆汹,也就是同步代碼塊在當(dāng)前線程沒有執(zhí)行完之前愚墓,沒有其它線程會執(zhí)行該同步塊,一旦有了第二個線程的爭用昂勉,偏向鎖就會升級為輕量級鎖浪册,如果輕量級鎖自旋到達(dá)閾值后,沒有獲取到鎖岗照,就會升級為重量級鎖村象,沒有獲取到鎖的線程阻塞掛起,直到持有鎖的線程執(zhí)行完同步塊喚醒他們攒至;
1.先是偏向鎖
2.有競爭則升級為輕量鎖,自旋獲取鎖迫吐,成功則依舊為輕量鎖
3.自旋超過閾值依舊獲取不到鎖库菲,則升級為重量鎖。
具體synchronized的執(zhí)行過程:
- 檢測Mark Word里面是不是當(dāng)前線程的ID渠抹,如果是蝙昙,表示當(dāng)前線程處于**偏向鎖 **
- 如果不是,則使用CAS將當(dāng)前線程的ID替換Mard Word奇颠,如果成功則表示當(dāng)前線程獲得偏向鎖烈拒,置偏向標(biāo)志位1
- 如果失敗,則說明發(fā)生競爭荆几,撤銷偏向鎖吨铸,進(jìn)而升級為輕量級鎖行拢。
- 當(dāng)前線程使用CAS將對象頭的Mark Word替換為鎖記錄指針,如果成功诞吱,當(dāng)前線程獲得鎖
- 如果失敗舟奠,表示其他線程競爭鎖,當(dāng)前線程便嘗試使用自旋來獲取鎖房维。
- 如果自旋成功則依然處于輕量級狀態(tài)沼瘫。
- 如果自旋失敗,則升級為重量級鎖咙俩。