扫码阅读
手机扫码阅读
Java中的锁升级机制:偏向锁、轻量级锁和重量级锁

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

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的不同锁状态:无锁、偏向锁、轻量级锁和重量级锁。
锁的特点
- 重量级锁:涉及大量开销,性能较低。
- 轻量级锁:适用于无竞争场景,通过修改对象头的锁标志来提高性能。
- 偏向锁:适用于单线程持有锁的场景,通过简化加锁过程来提高性能。
文章结束语提醒读者:如需转载请注明出处,同时欢迎关注、点赞和收藏,以支持作者。
想要了解更多内容?

springboot葵花宝典
扫码关注公众号
springboot葵花宝典的其他文章
Spring Boot starter总结
spring boot 在配置上相比spring要简单许多, 其核心在于spring-boot-starter, 在使用spring boot来搭建一个项目时, 只需要引入官方提供的starter, 就可以直接使用, 免去了各种配置。
什么?不知道微服务,一文让你了解微服务
,微服务是一种将软件应用拆分成多个小型服务的架构风格
Keepalived+Nginx高可用案例
Keepalived+Nginx高可用案例
深入探讨Redis数据结构
深入探讨Redis数据结构
RabbitMQ 入门实战指南:实现消息传递
RabbitMQ是一款功能强大的消息中间件,支持多种消息传递模式。下面是RabbitMQ的安装和快速入门指南:
加入社区微信群
与行业大咖零距离交流学习


PMO实践白皮书
白皮书上线
白皮书上线