扫码阅读
手机扫码阅读
Java中的锁升级机制:偏向锁、轻量级锁和重量级锁
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-jing.png)
springboot葵花宝典
扫码关注公众号
Java中的锁升级机制摘要
在Java中,synchronized关键字底层由monitor实现,这种锁机制叫做重量级锁。随着JDK的发展,synchronized进行了优化,引入了偏向锁和轻量级锁,以提高在少数竞争或无竞争场景下的性能。
重量级锁
重量级锁涉及到用户态与内核态的切换以及进程上下文切换,造成较大开销。JDK 1.6为了减轻这种开销,引入了偏向锁和轻量级锁。
MarkWord
对象在JVM中的存储可以分为三部分:对象头、实例数据和对齐填充。对象头的MarkWord是锁状态信息的关键,包含hashcode、age、偏向锁标识、线程ID、epoch、指向锁记录或Monitor的指针等信息。
轻量级锁
轻量级锁应用于线程交替执行同步块的场景,通过CAS操作减少上下文切换。当存在竞争时,轻量级锁会升级为重量级锁。解锁时,若CAS失败也会导致锁的升级。
偏向锁
偏向锁适用于一个线程长时间使用锁的场景。它在第一次加锁时使用CAS操作,之后的加锁只需检查MarkWord中的线程ID。当出现多线程竞争时,偏向锁会升级。
面试题示例
在面试中,可能会问到Monitor实现的锁属于重量级锁以及锁升级的问题。需要了解synchronized的不同锁状态:无锁、偏向锁、轻量级锁和重量级锁。
锁的特点
- 重量级锁:涉及大量开销,性能较低。
- 轻量级锁:适用于无竞争场景,通过修改对象头的锁标志来提高性能。
- 偏向锁:适用于单线程持有锁的场景,通过简化加锁过程来提高性能。
文章结束语提醒读者:如需转载请注明出处,同时欢迎关注、点赞和收藏,以支持作者。
想要了解更多内容?
![](/theme/default/default/images/main/icon-jing.png)
springboot葵花宝典
扫码关注公众号
springboot葵花宝典的其他文章
SpringBoot-28-RestTemplate基本介绍
SpringBoot-28-RestTemplate基本介绍
MySQL日期时间函数和操作总结
MySQL日期时间函数和操作总结
Docker 安装全解析:从零开始在 CentOS 上部署容器引擎
在当今的软件开发和部署中,容器化已经成为一种必备技术。而 Docker 作为目前最为流行的容器化平台,其强大的功能和易用性受到众多开发者的喜爱。本文将为大家介绍如何在 CentOS 系统上安装 Docker,并帮助大家快速搭建容器化环境。
装了这几 个 IDEA 神级插件后,开始情不自禁的嘚瑟
装了这几 个 IDEA 神级插件后,开始情不自禁的嘚瑟I
解密微服务雪崩:保护您的应用免受灾难性故障的威胁
随着微服务架构的广泛应用,应用程序的复杂性已经得到了显著提高,但与之同时,微服务雪崩问题也开始引起广泛关注。微服务雪崩是指在微服务架构中,一个或多个微服务出现故障或不可用时,导致整个系统的不稳定甚至崩溃。
加入社区微信群
与行业大咖零距离交流学习
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
软件研发质量管理体系建设
白皮书上线