Java 并发编程(六)|并发进阶高频:CAS、锁升级

发布时间:2026/7/31 18:22:26

Java 并发编程(六)|并发进阶高频:CAS、锁升级
并发进阶前言常见的锁策略乐观锁 VS 悲观锁重量级锁 VS 轻量级锁自旋锁 VS 挂起等待锁读写锁可重入锁 VS 不可重入锁公平锁 VS 非公平锁synchronized 锁的策略CAS认识CAS应用CAS实现原子类实现自旋锁CAS的ABA问题synchronized 原理锁升级锁消除锁粗化全文总结 系列文章导航前言本篇承接上一篇《四大并发实战单例、阻塞队列、定时器与线程池》深挖 Java 并发底层锁机制与无锁 CAS 编程覆盖面试必考的各类锁区分、CAS 原子操作、synchronized 三大优化锁升级 / 消除 / 粗化全部配套伪代码 可运行实战案例吃透底层原理类面试核心考点。常见的锁策略乐观锁 VS 悲观锁这是“锁的一种特性”。此处的悲观和乐观是对后续锁冲突是否激烈给出的预测。乐观锁预测接下来锁冲突的概率不大就可以少做一些工作。悲观锁预测接下来锁冲突的概率很大就应该多做一些工作。重量级锁 VS 轻量级锁重量级锁锁的开销比较大。轻量级锁锁的开销比较小。乐观锁通常是轻量级的锁悲观锁通常是重量级的锁。自旋锁 VS 挂起等待锁自旋锁一种轻量级锁的典型实现。1往往在纯用户态实现。2比如一个while循环不停检查当前锁是否被释放若没有就继续循环释放了就获取到锁从而结束循环。忙等消耗CPU换来更快的响应速度。挂起等待锁一种重量级锁的典型实现。1要借助系统API实现。2一旦出现锁竞争就会在内核中触发一系列的动作比如让这个线程进入阻塞状态暂时不参与CPU调度。阻塞的开销很大。读写锁读写锁把加锁分成两种读加锁、写加锁读加锁读的时候可以读但是不可以写。写加锁写的时候不可以读也不可以写。两个线程加锁过程中1读锁和读锁之间不会产生竞争2读锁和写锁之间有竞争3写锁和写锁之间有竞争。可重入锁 VS 不可重入锁可重入锁一个线程针对同一把锁连续加锁两次不会死锁。不可重入锁一个线程针对同一把锁连续加锁两次会死锁。公平锁 VS 非公平锁当很多线程尝试加同一把锁时一个线程能够拿到锁其他线程阻塞等待一旦第一个线程释放锁之后接下来哪个线程能够拿到锁公平锁按照先来后到的顺序。非公平锁剩下的线程以均等的概率来重新竞争锁。操作系统提供的加锁API默认是非公平锁。synchronized 锁的策略乐观锁 VS 悲观锁自适应轻量级锁 VS 重量级锁自适应自旋锁 VS 挂起等待锁自适应。自适应1初始情况下synchronized会预测当前的锁冲突的概率不大此时以乐观锁模式运行轻量级锁基于自旋锁的方式实现2在实际使用过程中如果发现锁冲突的情况比较多synchronized就会升级成悲观锁重量级锁基于挂起等待的方式实现不是读写锁是可重入锁是非公平锁CAS认识CASCASCompare and swap比较交换的是内存和寄存器。比如有一个内存M两个寄存器ABCAS(M,A,B)如果M和A的值相同就把M和B里的值进行交换同时整个操作返回true否则无事发生同时整个操作返回false交换的本质是为了把B赋值给M。CAS其实是一个CPU指令。单个CPU指令是原子的就可以使用CAS完成一些操作进一步替代加锁。基于CAS实现线程安全的方式为“无锁编程”。应用CAS实现原子类publicclassDemo{publicstaticAtomicIntegercountnewAtomicInteger(0);publicstaticvoidmain(String[]args)throwsInterruptedException{// TODO 自动生成的方法存根Threadt1newThread(()-{for(inti0;i50000;i){count.getAndIncrement();//count}});Threadt2newThread(()-{for(inti0;i50000;i){count.getAndIncrement();}});t1.start();t2.start();t1.join();t2.join();System.out.println(count.get());}}原子类里面是基于CAS实现的。伪代码实现classAtomicInteger{privateintvalue;publicintgetAndIncrement(){intoldValuevalue;while(CAS(value,oldValue,oldValue1)!true){//这里的判定就是在判断是否有别的线程穿插过来oldValuevalue;}returnoldValue;}}加锁是通过阻塞的方式避免穿插执行CAS是通过重试的方式避免执行实现自旋锁伪代码publicclassSpinLock{privateThreadownernull;publicvoidlock(){// 通过 CAS 看当前锁是否被某个线程持有.// 如果这个锁已经被别的线程持有, 那么就⾃旋等待.// 如果这个锁没有被别的线程持有, 那么就把 owner 设为当前尝试加锁的线程.while(!CAS(this.owner,null,Thread.currentThread())){}}publicvoidunlock(){this.ownernull;}}CAS的ABA问题CAS进行操作的关键通过值“没有发生变化”来作为“没有其他线程穿插执行”的判定依据但这种判定方式不严谨极端情况下可能会有另一个线程穿插进来发生将值从A-B-A针对第一个线程虽然值没变但是实际上已经被穿插执行。解决方法让判定的数值按照一个方向增长不要反复横跳有增有减就会发生ABA。引入一个额外的变量版本号约定每次修改版本号就自增一次此时在使用CAS判定时就不是判定值了而是判定版本号看版本号是否变化了若版本号没变就代表没有线程穿插执行。synchronized 原理锁升级synchronized的状态变化无锁 - 偏向锁 - 自旋锁(轻量级锁) - 重量级锁。锁升级的过程是单向的不能再降级了。偏向锁不是真正加锁只是做了一个标记完全是运行时的优化策略。当锁冲突出现时偏向锁就升级成轻量锁就真正加锁了。锁升级的过程就是在性能和线程安全之间尽量进行权衡。锁消除编译器会自动针对当前写的加锁的代码做出判定如果编译器觉得这个场景不需要加锁此时就会把写的synchronized优化掉。例如StringBuilder 不带synchronizedStringBuffer 带有synchronized写了synchronized也不一定线程安全若在单个线程中使用StringBuffer编译器就会把synchronized优化掉编译器只会在自己非常有把握时才进行锁消除锁消除编译期锁消除运行时锁消除。保守保留锁编译器针对synchronized锁的处理策略。核心编译期无法预判运行时的线程竞争情况为了保证程序正确性不会擅自删除或修改代码逻辑只会把锁的语义完整保留到字节码中锁粗化锁的粒度synchronized中代码越少就认为锁的粒度越粗代码越少锁的粒度越细。for(...){sync(lock){n;}//锁粒度细}sync(lock){for(...){n;}//锁粒度粗}锁的粒度细的时候能够并发执行的逻辑更多更有利于充分利用CPU资源。若粒度细的锁被反复进行加锁解锁可能实际效果还不如粒度粗的锁涉及到频繁的锁竞争。全文总结本文完整梳理并发底层核心面试考点六类锁策略区分掌握不同锁适用业务场景CAS 无锁编程底层 CPU 指令原理、原子类实战、手写自旋锁以及 ABA 问题解决方案synchronized 底层三大核心优化单向锁升级、编译期锁消除、锁粗化理解 JVM 锁性能优化逻辑。后续会更新 JUC 工具类、线程安全集合全套实战内容欢迎点赞收藏评论区交流面试学习心得 系列文章导航本篇是「Java并发编程系列」的连载内容点击链接查看完整系列 上一篇Java 并发编程五四大并发实战单例、阻塞队列、定时器与线程池 点击直达「Java并发编程」专栏合集

相关新闻

LLaMA-Factory 部署与 DeepSeek-R1-Distill-Qwen 模型乱码问题解决全记录

LLaMA-Factory 部署与 DeepSeek-R1-Distill-Qwen 模型乱码问题解决全记录

2026/7/30 21:09:49

LLaMA-Factory 部署与 DeepSeek-R1-Distill-Qwen 模型乱码问题解决全记录 摘要:本文记录了在远程 A100 服务器上部署 LLaMA-Factory,并加载 DeepSeek-R1-Distill-Qwen 系列模型时遇到的输出乱码问题。通过强制指定 Qwen2Tokenizer,最终完美解…

AI微调是什么?不懂这个别说你懂AI

AI微调是什么?不懂这个别说你懂AI

2026/8/1 2:17:49

微调到底是什么 微调的英文是 Fine-tuning,字面意思就是「fine tune(精细调节)」。 大模型训练分两个阶段。 第一个阶段叫预训练。给AI喂几百GB的文本,让它学会语言规律、世界知识。这个阶段极贵,几千万到几个亿美金&a…

Eclipse Ditto 物模型搭建

Eclipse Ditto 物模型搭建

2026/7/30 12:42:23

需要知道Eclipse Ditto是什么 、怎么安装就点击下面的链接查阅。 Eclipse Ditto 、 Mosquitto MQTT 、 OpenModelica 开发工具-CSDN博客 Eclipse Ditto 开发环境 搭建-CSDN博客 Eclipse Ditto:开源物联网数字孪生平台技术深度解析 - 东峰叵,com - 博客园 一、主要…

OpenAI Codex API用量限制调整与Sol优化方案解析

OpenAI Codex API用量限制调整与Sol优化方案解析

2026/8/1 10:23:48

Codex 作为 OpenAI 的重要 API 服务,近期宣布对用量限制机制进行重要调整,同时其内部代号为 Sol 的优化方案带来了 18% 的效率提升。对于依赖 Codex 进行代码生成、自然语言处理或自动化任务开发的团队来说,这次更新意味着更稳定的服务体验和…

东华大学考研复试10天冲刺计划与技巧

东华大学考研复试10天冲刺计划与技巧

2026/8/1 10:23:48

1. 项目背景与核心目标"东华复试day10"这个标题背后,实际上隐藏着一个典型的考研复试准备项目。作为经历过考研全流程的过来人,我深知复试准备过程中每日规划的重要性。这个项目本质上是一个为期10天的复试冲刺计划,特别针对东华大…

IMX577 USB摄像头拆解与实战:从硬件解析到多平台驱动优化

IMX577 USB摄像头拆解与实战:从硬件解析到多平台驱动优化

2026/8/1 10:23:48

1. 从一颗明星传感器到你的桌面:IMX577 USB摄像头拆解如果你最近在寻找一款画质出色的USB摄像头,无论是为了视频会议、直播推流,还是做一些简单的机器视觉项目,那么“IMX577”这个型号很可能已经进入了你的视野。它不再仅仅是高端…

USB转TTL模块深度解析:从芯片选型到实战应用全指南

USB转TTL模块深度解析:从芯片选型到实战应用全指南

2026/8/1 10:23:48

1. 从USB到TTL:为什么我们需要一个“翻译官”如果你玩过路由器刷机、给单片机烧录程序,或者调试过一些嵌入式开发板,大概率会接触到一个不起眼但至关重要的“小玩意儿”——USB转TTL模块。这东西通常只有指甲盖大小,一端是USB-A或…

弱网山区用聚合路由器加信号放大器,效果真的更好吗?

弱网山区用聚合路由器加信号放大器,效果真的更好吗?

2026/8/1 10:23:48

海拔千米以上的山区,手机信号时有时无;户外直播推流,画面卡成PPT;应急通信现场,指令传输中断——这些场景对任何依赖网络的人来说,都是噩梦。 很多人的第一反应是“换手机”“换运营商”“换个位置试试”&a…

Hive表结构变更实战:添加、修改、删除列的原理与避坑指南

Hive表结构变更实战:添加、修改、删除列的原理与避坑指南

2026/8/1 10:13:47

1. 项目概述:Hive表结构变更的实战指南在数据仓库的日常运维和开发中,数据表的结构从来都不是一成不变的。业务需求的迭代、数据源的调整、性能优化的考量,都要求我们能够灵活地对已有的Hive表进行结构调整。今天要聊的,就是每个数…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/30 9:53:22

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/8/1 0:15:49

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/8/1 4:47:48

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/1 0:03:03

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/1 0:03:03

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/1 0:03:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/1 0:03:03

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/1 0:03:03

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/1 0:03:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…