扫码阅读
手机扫码阅读

Java中的锁升级机制:偏向锁、轻量级锁和重量级锁

228 2024-07-18

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

查看原文:Java中的锁升级机制:偏向锁、轻量级锁和重量级锁
文章来源:
springboot葵花宝典
扫码关注公众号
Java锁升级机制摘要

Java中的锁升级机制摘要

在Java中,synchronized关键字底层由monitor实现,这种锁机制叫做重量级锁。随着JDK的发展,synchronized进行了优化,引入了偏向锁轻量级锁,以提高在少数竞争或无竞争场景下的性能。

重量级锁

重量级锁涉及到用户态与内核态的切换以及进程上下文切换,造成较大开销。JDK 1.6为了减轻这种开销,引入了偏向锁和轻量级锁。

MarkWord

对象在JVM中的存储可以分为三部分:对象头、实例数据和对齐填充。对象头的MarkWord是锁状态信息的关键,包含hashcode、age、偏向锁标识、线程ID、epoch、指向锁记录或Monitor的指针等信息。

轻量级锁

轻量级锁应用于线程交替执行同步块的场景,通过CAS操作减少上下文切换。当存在竞争时,轻量级锁会升级为重量级锁。解锁时,若CAS失败也会导致锁的升级。

偏向锁

偏向锁适用于一个线程长时间使用锁的场景。它在第一次加锁时使用CAS操作,之后的加锁只需检查MarkWord中的线程ID。当出现多线程竞争时,偏向锁会升级。

面试题示例

在面试中,可能会问到Monitor实现的锁属于重量级锁以及锁升级的问题。需要了解synchronized的不同锁状态:无锁、偏向锁、轻量级锁和重量级锁。

锁的特点

  • 重量级锁:涉及大量开销,性能较低。
  • 轻量级锁:适用于无竞争场景,通过修改对象头的锁标志来提高性能。
  • 偏向锁:适用于单线程持有锁的场景,通过简化加锁过程来提高性能。

文章结束语提醒读者:如需转载请注明出处,同时欢迎关注、点赞和收藏,以支持作者。

想要了解更多内容?

查看原文:Java中的锁升级机制:偏向锁、轻量级锁和重量级锁
文章来源:
springboot葵花宝典
扫码关注公众号