java偏向鎖,輕量級鎖與重量級鎖為什麼會相互膨脹

時間 2021-11-02 17:28:02

1樓:麒麟改bug

1. 偏向鎖:在鎖物件的物件頭中記錄下當前獲取到該鎖的執行緒ID,該執行緒下次如果來獲取該鎖就可以直接獲取到了

螞蟻一面面試真題解析|配套筆記:

2. 輕量級鎖:由偏向鎖公升級來,當個執行緒獲取到鎖後,此時這把鎖是偏向鎖,此時如果有第個執行緒來競爭鎖,偏向鎖就會公升級為輕量級鎖,之所以叫輕量級鎖,是為了和重量級鎖區分開來,輕量級鎖底層是通過旋來實現的,並不會阻塞執行緒

3. 如果旋次數過多仍然沒有獲取到鎖,則會公升級為重量級鎖,重量級鎖會導致執行緒阻塞

4. 旋鎖:旋鎖就是執行緒在獲取鎖的過程中,不會去阻塞執行緒,也就所謂喚醒執行緒,阻塞和喚醒這兩個步驟都是需要作業系統去進的,較消耗時間,旋鎖是執行緒通過CAS獲取預期的個標記,如果沒有獲取到,則繼續迴圈獲取,如果獲取到了則表示獲取到了鎖,這個過程執行緒直在運中,相對沒有使太多的作業系統資源,較輕量。

2樓:勤川

偏向鎖:無競爭場景

輕量級鎖:輕微競爭場景。自旋,稍加等待即可,無需切換執行緒上下文。

重量級鎖:競爭大的場景。

由低到高依次公升級。開銷也依次增加。

3樓:劉自在

先說一下膨脹的條件:

1.偏向鎖膨脹:執行緒A持有鎖,其他執行緒請求過鎖就會膨脹,也就是說對於鎖來說,只要有超過乙個執行緒請求過鎖,注意是請求過,偏向鎖就會膨脹成重量級鎖。

2.輕量級鎖膨脹:執行緒A在執行中持有鎖,執行緒B競爭鎖,執行緒B會首先自旋,自旋超時之後會膨脹成輕量級鎖,注意條件是發生競爭。

3.重量級鎖是最高的級別,不存在膨脹。

舉重為什麼分重量級?

獵隼 這似乎是不需要回答的問題 舉重的決定性因素在於技術與力量 包含速度所產生的爆發力 的結合。而力量與肌肉量相關的體重緊密相連,只有在分級別的情況下才能實現公平比賽。摔跤 拳擊 綜合格鬥都是如此。 輕爾易舉 說白了就是為了讓更多的人參與進來,乙個200公斤體重的人力量能和50公斤體重的人一樣嗎?如...

泰森為什麼能以1 78的身高拿到重量級拳王?

花開富貴 泰森的身高在重量級中是很吃虧的,基本技術相當的情況下,身高臂展大的是占有一定優勢的,劉易斯和霍利菲爾德身高臂展都優於泰森,而且基礎和技術都不弱。劉易斯刺拳很快而且較重 穿插著還有兇猛的上鉤拳 有效的控制了同泰森的距離 臂展長 控制了比賽的節奏,有效的抑制了泰森的優勢。其實這幾個頂尖的拳手總...

拳擊和武術比賽為什麼要分重量級?

Gothelf Diors 同一規則下的技術差距不大時,體重差距才能成為唯一的短板。亂拳打死老師傅 也得是出亂拳的訓練量別太少,起碼得會兩手 那體重優勢才能發揮出來。要是練拳擊的老師傅碰上沒打過沙袋的亂拳,乙個會護頭乙個不會的差距 可比體重差距更致命。參考曙太郎,經常被比自己輕很多的人虐,多數是因為...