正在看《深入理解java虚拟机》 对于锁膨胀不是很明白。首先偏向锁,我理解偏向锁和轻量级锁之间区别是在获取锁的过程中,是否有CAS操作。但是为什么偏向锁不能直接替代轻量级锁,什么场景是轻量级锁能够解决但是偏向锁无法解决的呢?
第二个 书上402页上面说“如果有两条以上的线程竞争用同一个锁,轻量级锁就不再有效,要膨胀为重量级锁”,我的理解上不需要大于两个线程,等于两个线程的竞争情况下,也需要膨胀对吗?
认证高级PHP讲师
為什麼需要這麼多鎖?因為不同的鎖佔用的資源不同,一切都是為了使用更少的資源,而且程式執行得更快。
第一個問題。 偏向鎖: Hotspot的作者經過以往的研究發現大多數情況下鎖不僅不存在多線程競爭,而且總是由同一線程多次獲得,為了讓線程獲得鎖的代價更低而引入了偏向鎖。適用於一個執行緒存取同步程式碼區塊的場景。
輕量級鎖定: 用於競爭不是很激烈或同步程式碼區塊執行很快的場景,它不會阻塞,而是自旋。 (自旋幾次還沒取得鎖升級為重量級鎖)
第二個問題,輕量級鎖自旋幾次後還沒被鎖(自旋可以理解為循環),不管幾個執行緒都會膨脹。
以上為個人理解,可參考Infoq的這篇文章。
為什麼需要這麼多鎖?因為不同的鎖佔用的資源不同,一切都是為了使用更少的資源,而且程式執行得更快。
第一個問題。
偏向鎖: Hotspot的作者經過以往的研究發現大多數情況下鎖不僅不存在多線程競爭,而且總是由同一線程多次獲得,為了讓線程獲得鎖的代價更低而引入了偏向鎖。適用於一個執行緒存取同步程式碼區塊的場景。
輕量級鎖定: 用於競爭不是很激烈或同步程式碼區塊執行很快的場景,它不會阻塞,而是自旋。 (自旋幾次還沒取得鎖升級為重量級鎖)
第二個問題,輕量級鎖自旋幾次後還沒被鎖(自旋可以理解為循環),不管幾個執行緒都會膨脹。
以上為個人理解,可參考Infoq的這篇文章。