Java锁机制八股文

一、简短结论

  1. CAS是基础:所有Java锁机制的底层都依赖CAS实现原子操作
  2. AQS是框架:ReentrantLock等JUC锁基于AQS,AQS使用CAS+CLH队列
  3. synchronized是混合锁:经历了偏向锁→轻量级锁→重量级锁的升级过程,内部大量使用CAS
  4. 锁选择原则:简单场景用synchronized,需要高级功能用ReentrantLock

二、详细内容

1. CAS(Compare And Swap)

定义:无锁算法的核心,原子性地比较并更新值

实现原理

// 伪代码booleanCAS(Vexpect,Vupdate){if(currentValue==expect){currentValue=update;returntrue;}returnfalse;}

Java实现

  • sun.misc.Unsafe类的compareAndSwapInt/Long/Object
  • JUC包中的Atomic类:AtomicIntegerAtomicReference

特点

  • 乐观锁思想
  • 通过自旋(循环尝试)实现
  • 解决ABA问题:使用AtomicStampedReference(带版本号)

2. AQS(AbstractQueuedSynchronizer)

作用:JUC并发包的基石框架

核心组成

  • state:同步状态变量(volatile)
  • CLH队列:双向链表存储等待线程
  • Node节点:包含线程、等待状态、前后指针

ReentrantLock与AQS关系

  • 公平锁/非公平锁都是AQS子类
  • state=0表示锁空闲,state>0表示被持有
  • 可重入:state记录重入次数

AQS的CAS使用

// 状态更新protectedfinalbooleancompareAndSetState(intexpect,intupdate){returnunsafe.compareAndSwapInt(this,stateOffset,expect,update);}// 队列操作(入队、设置头尾节点)都用CAS保证线程安全

3. synchronized锁升级过程

Java对象头Mark Word结构(64位):

| 锁状态 | 54位 | 2位 | 1位(偏向) | 2位(锁标志) | |----------|----------------------|------|-----------|-------------| | 无锁 | hashCode/分代年龄等 | | 0 | 01 | | 偏向锁 | ThreadID(54位) | | 1 | 01 | | 轻量级锁 | 指向栈中锁记录的指针 | | | 00 | | 重量级锁 | 指向Monitor的指针 | | | 10 | | GC标记 | 空 | | | 11 |

锁升级流程

  1. 偏向锁(单线程访问)

    • 首次进入:CAS设置ThreadID到Mark Word
    • 重入:检查ThreadID匹配直接进入
  2. 轻量级锁(轻度竞争)

    • 有竞争时撤销偏向锁
    • 创建锁记录(Lock Record)复制Mark Word
    • CAS将对象头指向锁记录
    • 失败则自旋尝试
  3. 重量级锁(重度竞争)

    • 自旋超过阈值(默认10次)
    • 膨胀为重量级锁,向OS申请互斥量
    • 线程进入等待队列,涉及内核态切换

synchronized中的CAS应用

  • 偏向锁获取/撤销
  • 轻量级锁的锁记录设置
  • 锁升级的状态转换

4. synchronized vs ReentrantLock

synchronized

  • JVM内置,自动管理锁获取/释放
  • 非公平锁(但内部有优化)
  • 只有一个条件队列(wait/notify)
  • 优化后性能接近ReentrantLock

ReentrantLock

  • JDK实现,基于AQS
  • 手动lock/unlock(需finally释放)
  • 可中断、可超时、可公平
  • 支持多个Condition
  • 提供tryLock非阻塞获取

使用选择

  • 简单同步:synchronized(简洁不易出错)
  • 复杂需求:ReentrantLock(灵活控制)

5. 关键问题答案

Q1:AQS内部使用CAS还是什么?

  • 主要使用CAS:更新state、入队出队、设置头尾节点都依赖CAS
  • 配合volatile:state用volatile保证可见性
  • park/unpark:线程阻塞/唤醒机制

Q2:synchronized的实现原理?

  • 混合锁实现:偏向锁+CAS+轻量级锁+重量级锁
  • 锁升级策略:根据竞争强度动态升级
  • CAS关键作用:锁状态转换、线程ID设置、锁记录操作

6. 锁优化建议

  1. 减少锁粒度:锁尽量小的代码块
  2. 减少锁持有时间:尽快释放锁
  3. 读写分离:读多写少用读写锁
  4. 无锁化:能用CAS就不用锁
  5. 避免锁嵌套:预防死锁

7. 现代优化趋势

  1. 偏向锁废弃(Java 15+):维护成本高,实际收益有限
  2. 自适应自旋:根据历史成功率动态调整自旋次数
  3. 锁消除:JIT编译器移除不可能竞争的锁
  4. 锁粗化:合并连续的小锁为一个大锁

总结:Java锁机制从底层CAS到高层AQS再到synchronized,形成完整的并发控制体系。理解这些原理有助于写出高效、正确的并发代码,也能更好地排查并发问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1155808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2026视频播放器】电脑手视频播放器 PotPlayer‌,KMPlayer,VLC media player,MPV,MPC-HC,GOM Player‌,ACG

视频播放器是我们日常观影、学习、工作的重要工具。本文将为大家推荐10款专业实用的PC端视频播放器,全部纯净无广 ,支持超高清解码,满足不同用户的需求。 【地址】:https://tool.nineya.com/s/1iuc1h093 【资源也准备好了】&…

国内首例 AI 伴侣聊天提供者涉黄获刑,二审将开庭;OpenAI :大模型能力过剩,未来重心将转向系统层与应用层丨日报

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「…

微信视频号下载器,蝴蝶号视频下载

自媒体必备神器-微信视频号下载器 - 教你如何下载视频号视频 体积小、使用简单、支持 macOS 和 Windows 系统。 一、下载器简介 对于自媒体人来说,获取和保存微信视频号上的优质视频内容,是日常创作和学习的重要一环。为了帮助大家轻松下载微信视频号…

强烈安利9个AI论文平台,本科生毕业论文轻松搞定!

强烈安利9个AI论文平台,本科生毕业论文轻松搞定! AI 工具让论文写作变得轻松高效 在当今这个信息爆炸的时代,本科生的毕业论文写作早已不再是单纯的学术挑战,而是一场与时间、效率和质量的较量。尤其是面对复杂的选题、繁重的文献…

全网最全研究生必用AI论文工具TOP8测评

全网最全研究生必用AI论文工具TOP8测评 2026年研究生必备AI论文工具测评:为何要关注这些工具? 随着人工智能技术的不断进步,越来越多的学术工作者开始依赖AI工具来提升论文写作效率与质量。对于研究生群体而言,从选题、文献综述到…

业务即代码:当DDD穿越古代商帮-第2集:第一次事件风暴

笔言: 在《1999点科技树》第九、十合集(看见与守护:分布式系统的观测体系与安全架构)中,我曾提及一个写作计划——将 DDD(领域驱动设计) 与 BIZBOK(业务知识体系) 深度融合&#xff…

别再纠结了:Lambda 还是 Kappa?流批统一这件事,真没你想得那么玄乎

“别再纠结了:Lambda 还是 Kappa?流批统一这件事,真没你想得那么玄乎”很多人一聊到流-批统一架构,第一反应就是一句话:“Lambda 太复杂,Kappa 才是未来。”听起来很有道理,对吧? 但…

10341_基于Springboot的珠宝销售网站

1、项目包含项目源码、项目文档、数据库脚本、软件工具等资料;带你从零开始部署运行本套系统。2、项目介绍随着科学技术和信息通讯的飞速发展,Internet极大的丰富和改变着我们生活的各个行业。随着Internet的普及应用,人们可以跨越时间和空间…

Linux在毕业设计中的核心难点与重点梳理(附避坑指南)

在计算机相关专业毕业设计中,Linux 常作为底层环境、服务器载体或核心操作平台,无论是嵌入式、后端开发、运维方向,都绕不开相关应用。但多数同学实操经验不足,容易在核心环节卡壳,本文梳理关键难点与重点,…

亲测好用8个一键生成论文工具,MBA论文写作必备!

亲测好用8个一键生成论文工具,MBA论文写作必备! AI 工具如何成为论文写作的得力助手 在当今快节奏的学术环境中,MBA 学生和研究者常常面临时间紧、任务重的压力。尤其是在撰写论文时,从选题到成稿,每一个环节都需要大量…

智能电梯门禁(可视对讲联动梯控)方案实现梯控联动召梯、呼梯、访客联动功能,完全融入楼宇可视对讲门禁系统,核心通过协议对接 + 物理接线双重方式,保障乘梯权限管理与联动控制的稳定性。

这份清单非常专业,清晰地勾勒出了一套深度融入楼宇对讲系统的智能梯控解决方案。这不仅仅是设备的堆砌,更是一套通过协议对接和硬件联动,实现从“业主无感通行”到“访客精准授权”全场景覆盖的完整蓝图楼宇可视对讲门禁与梯控系统联动方案一…

Webpack从“配置到提速”,4步解决“打包慢、体积大”问题

一、数据绑定:别让模板变成“计算战场”1. 复杂逻辑抽离到计算属性问题:模板中写 {{ user.age > 18 ? 成年 : 未成年 }} 等复杂表达式,会导致模板臃肿且难以维护。 解决方案:用 computed 封装逻辑,兼具缓存特性&am…

机器人系统ros2期末速通2

6. Action(动作):带反馈、可取消的长任务6.1 核心概念(先搞懂是什么)Action 是 ROS2 里专门处理耗时久、需要中间反馈、还能随时取消的任务的通信方式。专业名词拆解:Goal(目标)&…

拼多多春节加班费热议背后,近屿智能给出了另一份高薪答案

春节临近,你是否也正陷入“年后再说”的循环?当大多数人在为年终琐事分心时,有一群人,却在默默积累着“节后爆发”的资本——他们关注的不是加班补贴,而是如何让自己的技能,配得上更高的估值。一、高薪加班…

[特殊字符][特殊字符][特殊字符][特殊字符],拍一拍解锁快乐开挂版

拍了拍我的小肚子 🐷肥肉退退退₋₉₉₉拍了拍我的摸鱼手 🐟带薪快乐10086拍了拍我的奶茶杯 🥤吨吨吨喝不胖✨拍了拍我的钱包 🤑空空如也但暴富在路上拍了拍我的闹钟 ⏰迟到不存在∞拍了拍我的老板说:放假啦快冲&#…

智能地板:AI Agent的室内活动模式分析

智能地板:AI Agent的室内活动模式分析关键词:智能地板、AI Agent、室内活动模式、数据分析、行为识别摘要:本文围绕智能地板与AI Agent的室内活动模式分析展开。详细介绍了智能地板的技术原理、AI Agent的工作机制,探讨了如何通过…

机器人系统ros2期末速通4

一、16. 调试工具链(CLI rqt RViz2)1. 核心概念(系统里的实际样子)CLI(命令行工具):你在终端敲的 ROS 指令,是调试的 “基础武器”,比如查话题、查节点、查 TF 都靠它。…

夫妻间忌讳的9句话,烂在肚子也不要说

俗话说:百年修得同船渡,千年修得共枕眠。夫妻聊天别瞎聊,这9句话堪比“婚姻炸弹”,说了容易引发家庭“地震”,快烂在肚子里!你这脑子,跟没带出门似的吧?就你这水平,还不如…

2026 版 “全国统一长辈口头禅”,听完 DNA 动了

少吃点外卖🥡,全是科技与狠活天天熬夜🌙,身体迟早熬垮穿这么少?不冷吗?赶紧加衣服🧥别老点奶茶🥤,又贵又不健康工资发了多少?存下来多少呀💰处对象…

机器人系统ros2期末速通3

一、11. Composition(组件化节点)1. 核心概念(先懂 “人话”)进程:可以理解为 “一个独立的程序窗口”,比如你开的微信是一个进程,浏览器是另一个进程。组件化:把原本要开多个 “程序…