偏向锁的获取和撤销逻辑
生活随笔
收集整理的這篇文章主要介紹了
偏向锁的获取和撤销逻辑
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 首先獲取鎖?對(duì)象的Markword,判斷是否處于可偏向狀態(tài)。(biased_lock=1、且ThreadId為空)
2. 如果是可偏向狀態(tài),則通過(guò)CAS操作,把當(dāng)前線程的ID寫入到MarkWord?
? ?a) 如果cas成功,那么markword就會(huì)變成這樣。表示已經(jīng)獲得了鎖對(duì)象的偏向鎖,接著執(zhí)行同步代碼塊?
? ?b) 如果cas失敗,說(shuō)明有其他線程已經(jīng)獲得了偏向鎖,這種情況說(shuō)明當(dāng)前鎖存在競(jìng)爭(zhēng),需要撤銷已獲得偏向鎖的線程,并且把它持有的鎖升級(jí)為輕量級(jí)鎖(這個(gè)操作需要等到全局安全點(diǎn),也就是沒有線程在執(zhí)行字節(jié)碼)才能執(zhí)行
3. 如果是已偏向狀態(tài),需要檢查markword中存儲(chǔ)的ThreadID是否等于當(dāng)前線程的ThreadID?
? ? a) 如果相等,不需要再次獲得鎖,可直接執(zhí)行同步代碼塊?
? ? b) 如果不相等,說(shuō)明當(dāng)前鎖偏向于其他線程,需要撤銷偏向鎖并升級(jí)到輕量級(jí)鎖
?
總結(jié)
以上是生活随笔為你收集整理的偏向锁的获取和撤销逻辑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。