深度解析:偏向鎖、輕量級鎖、重量級鎖

  在JDK1.5之後java官方對synchronized進行了加強,爲其增加了偏向鎖,輕量級鎖,重量級鎖。

偏向鎖:

優點:減少無競爭且只有一個線程使用鎖的情況下,使用輕量級鎖產生的性能系消耗。

偏向鎖假定未來只有第一個申請鎖的線程會使用鎖,不會再有任何線程來申請鎖。因此,只需要Mark Word中CAS記錄ower,如果記錄成功,則偏向鎖獲取成功,記錄鎖狀態爲偏向鎖,以後,當前線程就等於ower,就可以零成本直接獲取鎖。否則,說明有其他線程競爭,將會膨脹爲輕量級鎖。

輕量級鎖:

優點:減少無實際競爭情況下使用重量級鎖帶來的性能消耗。

當一個線程訪問同步代碼塊時,會將Mark Word複製一份進行修改,如果還有線程來訪問同步代碼塊也會將Mark Word複製一份進行修改,如果鎖標誌位標記着已經有鎖佔用同步代碼塊,會出現修改失敗的操作,然後會繼續循環修改鎖的操作,直到線程釋放鎖爲止。這個循環修改鎖也被稱爲自旋鎖。如果鎖競爭激烈,那麼輕量級鎖將會膨脹爲重量級鎖。

重量級鎖:

就是傳統的實現了可重入的獨佔鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章