java偏向锁,轻量级锁与重量级锁为什么会相互膨胀?

 mobiledu2502863997 发布于 2022-10-27 05:25

正在看《深入理解java虚拟机》 对于锁膨胀不是很明白。
首先偏向锁,我理解偏向锁和轻量级锁之间区别是在获取锁的过程中,是否有CAS操作。但是为什么偏向锁不能直接替代轻量级锁,什么场景是轻量级锁能够解决但是偏向锁无法解决的呢?

第二个 书上402页上面说“如果有两条以上的线程竞争用同一个锁,轻量级锁就不再有效,要膨胀为重量级锁”,我的理解上不需要大于两个线程,等于两个线程的竞争情况下,也需要膨胀对吗?

1 个回答
  • 为什么需要这么多锁?因为不同的锁占用的资源不同,一切都是为了使用更少的资源,并且程序执行更快。

    第一个问题。
    偏向锁: Hotspot的作者经过以往的研究发现大多数情况下锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。适用于一个线程访问同步代码块的场景。

    轻量级锁: 用于竞争不是很激烈或同步代码块执行很快的场景,它不会阻塞,而是自旋。(自旋几次还没获取到锁升级为重量级锁)

    第二个问题,轻量级锁自旋几次后还没得到锁(自旋可以理解为循环),不管几个线程都会膨胀。

    以上为个人理解,可参考Infoq的这篇文章。

    2022-11-12 01:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有