当前位置: 首页 > news >正文

【Java面试笔记:进阶】16.synchronized底层如何实现?什么是锁的升级、降级?

在 Java 中,synchronized 关键字的底层实现依赖于 对象头(Object Header监视器锁(Monitor 机制,并通过 锁的状态升级(Lock Escalation 来优化同步性能。

1. synchronized 的底层实现

synchronized 的同步机制基于 Monitor 对象,它是同步的基本实现单元。
通过 monitorentermonitorexit 指令实现同步逻辑。

1. 对象头与 Mark Word

  • 1.对象头结构
    每个 Java 对象在内存中由三部分组成:

    • Mark Word(标记字段):存储对象自身的运行时数据(如哈希码、锁状态等)。
    • Klass Pointer(类型指针):指向类的元数据信息。
    • 数组长度(仅数组对象有)。
  • 2.Mark Word 内容
    Mark Word 的长度为 32/64 位(取决于 JVM 位数),其内容根据锁状态动态变化:

    锁状态存储内容
    无锁对象哈希码、分代年龄等
    偏向锁持有偏向锁的线程 ID、偏向时间戳
    轻量级锁指向栈中锁记录(Lock Record)的指针
    重量级锁指向监视器(Monitor)的指针

2. 监视器锁(Monitor)

  • 1.Monitor 结构
    每个对象关联一个 Monitor,其核心字段包括:

    • Owner:持有锁的线程。
    • EntryList:等待获取锁的阻塞线程队列。
    • WaitSet:调用 wait() 后进入等待状态的线程队列。
  • 2.锁的获取流程

    1. 线程进入 synchronized 代码块时,尝试通过 CAS 操作修改 Mark Word
    2. 若成功,则获取锁;若失败,则根据锁状态进行 锁膨胀(升级为更高等级的锁)。

2. 锁的升级与降级

  • 锁的三种状态:
    • 偏斜锁(Biased Locking):默认情况下,当没有竞争时使用。通过 CAS 操作在对象头的 Mark Word 部分设置线程 ID,表示对象偏向当前线程。
    • 轻量级锁:当有其他线程尝试获取锁时,偏斜锁会撤销并升级为轻量级锁。轻量级锁依赖 CAS 操作尝试获取锁。
    • 重量级锁:如果轻量级锁竞争激烈,则进一步升级为重量级锁,依赖操作系统内部的互斥锁。
  • 锁升级过程:
    • 无竞争时使用偏斜锁。
    • 有其他线程尝试获取锁时,偏斜锁撤销并

相关文章:

  • 医学图像(DICOM数据)读取及显示(横断面、冠状面、矢状面、3D显示)为什么用ITK+VTK,单独用ITK或者VTK能实一样功能吗?
  • Spring Cloud Alibaba VS Spring Cloud
  • 如何将极狐GitLab 合并请求导出为 CSV?
  • 《Pinia 从入门到精通》Vue 3 官方状态管理 -- 基础入门篇
  • vue3+TS 手动实现表格滚动
  • 取模--特殊情况讨论/数论
  • 机器学习--线性回归模型
  • Unity InputSystem触摸屏问题
  • 使用Tauri 2.3.1+Leptos 0.7.8开发桌面小程序汇总
  • 优雅实现网页弹窗提示功能:JavaScript与CSS完美结合
  • PyQt6基础_QTabWidget
  • 新增优惠券
  • 哈希表的实现
  • 大模型AI的“双刃剑“:数据安全与可靠性挑战与破局之道
  • 高精度并行2D圆弧拟合(C++)
  • ORACLE RAC环境使用ASM机制零宕机时间更换存储的实践
  • 安宝特案例 | AR技术在院外心脏骤停急救中的革命性应用
  • 4.4 记忆机制与上下文管理:短期与长期记忆的设计与应用
  • 新时代质量管理体系-端到端流程通俗演义,什么是端到端流程?
  • 3D高斯个人笔记
  • 从陈毅杯到小应氏杯,五一长假上海掀起围棋热
  • 《开始推理吧3》:演员没包袱,推理更共情
  • 原油价格战一触即发?沙特不想再忍,领衔多个产油国加速增产
  • 贵州赤水丹霞大瀑布附近山体塌方车辆被埋,景区:无伤亡,道路已恢复
  • 中国金茂向滨江集团提供11.21亿元诚意金借款,拟合作开发3月获取的地块
  • 王受文已任中华全国工商业联合会领导班子成员