新闻详情

新闻详情

首页 / 资讯中心 / 详情

【JUC】Synchronized 锁升级底层全拆解,面试官深挖必背

发布时间:2026/9/10 19:49:53来源:尧图网络
【JUC】Synchronized 锁升级底层全拆解,面试官深挖必背
大家好我是程序员二叉。简介本篇为Java并发锁核心干货专攻面试必考Synchronized 全套底层机制。包含Synchronized底层Monitor原理、锁升级完整流程、三锁机制对比、不同修饰锁对象归属、偏向锁撤销重偏向、自适应自旋、锁粗化锁消除JVM优化知识点精炼全覆盖适合面试背诵。欢迎点赞关注收藏。一、synchronized 底层原理synchronized是JVM原生悲观可重入互斥锁底层基于ObjectMonitor监视器 对象头Mark Word实现。1. 代码块锁原理编译后生成两条字节码指令monitorenter抢锁monitorexit释放锁2. 方法锁原理无需指令通过方法访问标记位ACC_SYNCHRONIZED隐式加锁。3. 对象头 Mark Word锁状态、线程ID、GC年龄、锁标记全部存在对象头中是锁升级的唯一载体。4. 可重入原理底层维护锁计数器同一线程多次加锁计数器1释放-1归零才算真正释放。二、Synchronized 锁升级完整流程面试必背锁只能单向升级不可逆、不能降级升级链路无锁 → 偏向锁 → 轻量级锁 → 重量级锁1. 偏向锁无竞争场景首个线程获取锁JVM将对象头标记偏向当前线程。后续无需CAS、无需加锁直接进入同步代码。2. 轻量级锁轻微竞争场景出现多线程交替竞争撤销偏向锁。线程在栈帧创建Lock Record通过CAS自旋抢锁用户态运行不阻塞。3. 重量级锁激烈竞争场景自旋多次失败、锁持有时间长、竞争激烈。直接膨胀为重量级锁依托操作系统Monitor抢锁失败线程进入内核阻塞队列。三、偏向锁 / 轻量级锁 / 重量级锁 对比详解1. 偏向锁适用场景单线程重复执行、几乎无竞争核心原理偏向首个线程消除一切同步操作优点性能极高、几乎零开销缺点多线程竞争时撤销伴随STW开销2. 轻量级锁适用场景线程交替执行、锁时间短、竞争轻微核心原理CAS自旋抢锁、用户态空转、不阻塞线程优点无内核切换、响应快、吞吐高缺点高竞争下自旋空转、浪费CPU3. 重量级锁适用场景并发激烈、锁持有时间长、大量线程竞争核心原理内核级互斥阻塞抢不到锁直接挂起线程优点无自旋消耗CPU缺点用户态内核态切换开销最大四、synchronized 四种修饰方式锁对象是谁修饰普通成员方法锁对象this 当前实例对象不同实例互不竞争、互不影响修饰 static 静态方法锁对象当前类 Class 对象全局唯一类锁所有实例共享竞争修饰同步代码块(this)锁对象当前实例对象修饰同步代码块(自定义对象)锁对象自定义任意 Object 锁对象五、偏向锁撤销 批量重偏向1. 偏向锁撤销触发场景多线程发生锁竞争调用对象hashCode()主动争抢偏向锁撤销需要STW 暂停清空偏向线程ID升级为轻量级锁。2. 批量重偏向JVM优化针对同一类对象撤销次数≥20次开启批量重偏向直接偏向新竞争线程撤销次数≥40次直接关闭当前类的偏向锁目的解决大量偏向锁撤销导致的性能抖动。六、轻量级锁 — 自适应自旋JDK1.6优化摒弃固定自旋次数JVM动态自适应调节上次自旋成功抢锁 → 本次自旋次数增加上次自旋频繁失败 → 减少自旋次数、甚至不自旋极大减少无效CPU空转适配真实并发场景。七、JVM两大锁优化锁粗化 锁消除1. 锁粗化场景循环内频繁加锁、解锁JVM优化合并多次细粒度锁为一次大锁减少频繁monitor切换开销提升执行效率2. 锁消除场景局部锁对象、无逃逸、不共享JVM通过逃逸分析判断无多线程竞争直接消除锁代码彻底去除同步开销面试速记总结Synchronized 底层依托ObjectMonitor 对象头MarkWord锁升级无锁→偏向→轻量→重量单向不可逆偏向锁适配无竞争、轻量级适配低竞争、重量级适配高竞争普通方法锁实例、静态方法锁Class类对象偏向锁支持撤销、批量重偏向解决竞争性能问题JVM优化自适应自旋、锁粗化、锁消除
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

ParaView配置保存全攻略:从状态文件到Python脚本的完整指南 2026/9/10 19:47:58

ParaView配置保存全攻略:从状态文件到Python脚本的完整指南

做仿真和可视化的人,几乎都有过这样的经历:花了一下午在ParaView里调好颜色映射、摆好相机视角、设好切片位置,关掉软件前还没意识到问题的严重性,第二天打开发现一切回到原点,只能凭记忆重新来一遍。这种挫败感我太熟…

阅读更多 →
SpringBoot + Vue3全链路类型安全实战:从契约生成到构建时检查 2026/9/10 19:47:58

SpringBoot + Vue3全链路类型安全实战:从契约生成到构建时检查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
从Chain到Workflow:Eino编排范式对比与生产级选型指南 2026/9/10 19:47:57

从Chain到Workflow:Eino编排范式对比与生产级选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
ClickHouse 裸机镜像(bare image)深度解析:从 scratch 验证数据库的最小操作系统依赖 2026/9/10 19:47:57

ClickHouse 裸机镜像(bare image)深度解析:从 scratch 验证数据库的最小操作系统依赖

ClickHouse 裸机镜像(bare image)深度解析:从 scratch 验证数据库的最小操作系统依赖 【免费下载链接】ClickHouse ClickHouse is a real-time analytics database management system 项目地址: https://gitcode.com/GitHub_Trending/cli/C…

阅读更多 →
SSM+Android学籍异动管理平台:毕设设计与实现全解析 2026/9/10 19:47:57

SSM+Android学籍异动管理平台:毕设设计与实现全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Repomix 性能审查规范解析:系统性识别 TypeScript/Node.js 代码的性能与资源问题 2026/9/10 19:44:57

Repomix 性能审查规范解析:系统性识别 TypeScript/Node.js 代码的性能与资源问题

Repomix 性能审查规范解析:系统性识别 TypeScript/Node.js 代码的性能与资源问题 【免费下载链接】repomix 📦 Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed you…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞