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

【JVM深度解析】第26篇:CAS、AQS与并发工具类原理

摘要CASCompare-And-Swap和 AQSAbstractQueuedSynchronizer是 Java 并发包的基石。CAS 通过硬件支持的原子指令实现无锁并发AQS 通过模板模式封装了线程等待和唤醒的通用逻辑。本文深入解析 CAS 的底层实现Unsafe 类 CPU 原子指令、AQS 的核心原理CLH 队列 state 变量、以及 ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier 等常用并发工具的实现细节。掌握这些你才能真正理解 concurrent 包的设计哲学写出高效的无锁代码。一、CAS 深度解析1.1 CAS 原理CAS 操作 ┌──────────────────────────────────────────────────────────────────┐ │ │ │ CAS(V, Expected, New) { │ │ if (V Expected) { │ │ V New; │ │ return true; │ │ } │ │ return false; │ │ } │ │ │ │ 特点 │ │ - 单个原子操作 │ │ - 硬件支持CPU 指令级 │ │ - 不阻塞线程失败重试 │ │ │ └──────────────────────────────────────────────────────────────────┘1.2 Unsafe 类的 CAS 操作// Java 中 CAS 的使用publicclassAtomicInteger{privatevolatileintvalue;// sun.misc.Unsafe - 直接操作内存的类privatestaticfinalUnsafeunsafeUnsafe.getUnsafe();privatestaticfinallongvalueOffset;static{try{valueOffsetunsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField(value));}catch(Exceptione){thrownewError(e);}}// 原子递增publicfinalintincrementAndGet(){returnunsafe.getAndAddInt(this,valueOffset,1)1;}// Unsafe 的 getAndAddInt 实现// public final int getAndAddInt(Object o, long offset, int delta) {// int v;// do {// v unsafe.getIntVolatile(o, offset); // 读取当前值// } while (!unsafe.compareAndSwapInt(o, offset, v, v delta)); // CAS// return v;// }}1.3 CAS 的 ABA 问题ABA 问题 ┌──────────────────────────────────────────────────────────────────┐ │ │ │ 线程 A 读取 V 1 │ │ 线程 B: CAS(V, 1, 2) 成功V 2 │ │ 线程 B: CAS(V, 2, 1) 成功V 1 ← 变回来了 │ │ 线程 A: CAS(V, 1, 3) 成功 ← A 以为没变过 │ │ │ │ 后果某些场景下会导致错误结果 │ │ │ └──────────────────────────────────────────────────────────────────┘// 解决方案AtomicStampedReference带版本号publicclassABASolution{privatestaticAtomicStampedReferenceIntegerrefnewAtomicStampedReference(1,0);publicstaticvoidmain(String[]args){intstampref.getStamp();intexpectedref.getReference();// CAS 加上版本号检查ref.compareAndSet(expected,2,stamp,stamp1);ref.compareAndSet(2,1,stamp1,stamp2);// 现在线程 A 会失败版本号不匹配ref.compareAndSet(1,3,stamp,stamp1);// false}}二、AQS 深度解析2.1 AQS 核心结构┌──────────────────────────────────────────────────────────────────┐ │ AQS 核心结构 │ ├──────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ state 状态变量 │ │ │ │ │ │ │ │ - ReentrantLock: 持有锁的次数 │ │ │ │ - Semaphore: 可用许可数 │ │ │ │ - CountDownLatch: 倒计时计数 │ │ │ │ - CyclicBarrier: 等待线程数 │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ CLH 队列双向链表 │ │ │ │ │ │ │ │ head ──→ node ──→ node ──→ node ──→ tail │ │ │ │ (持有者) │ │ │ │ │ │ │ │ Node 属性 │ │ │ │ - prev / next: 双向链表指针 │ │ │ │ - thread: 等待的线程 │ │ │ │ - waitStatus: 等待状态 │ │ │ │ - SHARED / EXCLUSIVE: 共享/独占模式 │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘2.2 ReentrantLock 实现// ReentrantLock 基于 AQS 的实现publicclassReentrantLockextendsAbstractQueuedSynchronizer{// 1. 非公平锁 tryAcquireprotectedbooleantryAcquire(intacquires){finalThreadcurrentThread.currentThread();intcgetState();if(c0){// CAS 尝试获取锁if(compareAndSetState(0,acquires)){setExclusiveOwnerThread(current);returntrue;}}elseif(currentgetExclusiveOwnerThread()){// 重入增加 statesetState(cacquires);returntrue;}returnfalse;}// 2. tryReleaseprotectedbooleantryRelease(intreleases){intcgetState()-releases;if(Thread.currentThread()!getExclusiveOwnerThread())thrownewIllegalMonitorStateException();booleanfreefalse;if(c0){freetrue;setExclusiveOwnerThread(null);}setState(c);returnfree;}// 3. lock() 方法publicvoidlock(){sync.lock();// 委托给 Sync}}2.3 CountDownLatch 实现// CountDownLatch 基于 AQS 的实现publicclassCountDownLatchextendsAbstractQueuedSynchronizer{privatestaticfinalclassSyncextendsAbstractQueuedSynchronizer{Sync(intcount){setState(count);// state 计数}// 共享模式获取等待计数归零protectedinttryAcquireShared(intignored){returngetState()0?1:-1;}// 共享模式释放计数 - 1protectedbooleantryReleaseShared(intdecrements){for(;;){intcgetState();if(c0)returnfalse;intnextc-1;if(compareAndSetState(c,next))returnnext0;}}}privatefinalSyncsync;// await() - 等待计数归零publicvoidawait()throwsInterruptedException{sync.acquireSharedInterruptibly(1);}// countDown() - 计数 - 1publicvoidcountDown(){sync.releaseShared(1);}}三、常用并发工具对比┌──────────────────────────────────────────────────────────────────┐ │ Java 并发工具对比 │ ├──────────────────────────────────────────────────────────────────┤ │ │ │ ReentrantLock vs synchronized: │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ 特性 │ ReentrantLock │ synchronized │ │ │ │ 可中断 │ 支持 │ 不支持 │ │ │ │ 超时 │ 支持 │ 不支持 │ │ │ │ 非公平锁 │ 支持 │ 不支持非公平 │ │ │ │ 多条件队列 │ 支持 │ 不支持 │ │ │ │ 性能 │ JDK 6 相近 │ JDK 6 相近 │ │ │ └────────────────────────────────────────────────────────────┘ │ │ │ │ CountDownLatch vs CyclicBarrier: │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ 特性 │ CountDownLatch │ CyclicBarrier │ │ │ │ 用途 │ 一次性等待 │ 可循环使用 │ │ │ │ 计数器 │ 只减不复位 │ 归零后重置 │ │ │ │ 复用 │ 不可 │ 可 │ │ │ │ 等待线程状态 │ 继续执行 │ 一起继续执行 │ │ │ └────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘四、总结CAS 是硬件级的原子操作Unsafe 类提供了直接的 CAS 调用但存在 ABA 问题可用 AtomicStampedReference 解决。AQS 通过 state 变量和 CLH 队列封装了线程等待/唤醒的通用逻辑ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier 等工具都基于 AQS 构建。理解这些底层原理才能真正用好并发包。系列导航上一篇【JVM深度解析】第25篇volatile与synchronized深度原理下一篇【JVM深度解析】第27篇并发编程实战案例与陷阱系列目录JVM深度解析参考资料JUC - AbstractQueuedSynchronizerDoug Lea - The java.util.concurrent Synchronizer FrameworkJava Concurrency in Practice

相关文章:

【JVM深度解析】第26篇:CAS、AQS与并发工具类原理

摘要 CAS(Compare-And-Swap)和 AQS(AbstractQueuedSynchronizer)是 Java 并发包的基石。CAS 通过硬件支持的原子指令实现无锁并发,AQS 通过模板模式封装了线程等待和唤醒的通用逻辑。本文深入解析 CAS 的底层实现&…...

【限时解密】2026奇点大会未公开PPT核心页:5大AI根因分析失效场景及防御性编码清单

第一章:2026奇点智能技术大会:AI代码根因分析 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次将“AI代码根因分析”列为独立技术轨道,聚焦大模型驱动的自动化缺陷定位、语义级错误溯源与跨栈因果推理。不同于传统日志分析或符号…...

2026 年 5 大编程网站深度对比:零基础到就业,谁才是自学首选?

引言:自学编程的崛起与平台的抉择 在数字浪潮的推动下,编程自学已成为许多人迈向IT行业的首选路径。据《2025年在线教育趋势报告》显示,全球有超过60%的编程学习者倾向于通过线上平台进行自学。然而,从“零基础”到“成功就业”的…...

KS-Downloader:专业级快手无水印视频下载解决方案

KS-Downloader:专业级快手无水印视频下载解决方案 【免费下载链接】KS-Downloader 快手(KuaiShou)视频/图片下载工具;数据采集工具 项目地址: https://gitcode.com/gh_mirrors/ks/KS-Downloader 还在为无法保存喜欢的快手视…...

【JVM深度解析】第25篇:volatile与synchronized深度原理

摘要 volatile 和 synchronized 是 Java 并发编程中最常用的两个关键字,但它们的底层原理却大不相同。volatile 通过内存屏障保证可见性和有序性(无原子性),synchronized 通过监视器锁保证原子性、可见性和有序性。本文深入解析两…...

上交大与清华等突破:AI实现数据库自动技能扩展准确率提升突破

这项由上海交通大学主导,联合清华大学、新加坡国立大学以及蚂蚁集团共同开展的研究,发表于2026年6月的ACM数据管理顶级期刊《Proceedings of the ACM on Management of Data》第4卷第3期(SIGMOD 2026),论文编号为Artic…...

BaiduPCS-Go 终极指南:高效命令行管理百度网盘的完整方案

BaiduPCS-Go 终极指南:高效命令行管理百度网盘的完整方案 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go 还在为百度网盘的下载限速而烦恼&…...

3个技术方案解决米哈游游戏启动器的核心痛点:Starward架构解析

3个技术方案解决米哈游游戏启动器的核心痛点:Starward架构解析 【免费下载链接】Starward Game Launcher for miHoYo - 米家游戏启动器 项目地址: https://gitcode.com/gh_mirrors/st/Starward 对于同时游玩《原神》、《崩坏:星穹铁道》、《绝区零…...

机器人算法实战:用Python实现S形速度规划中的二分法与牛顿法(附完整代码)

机器人算法实战:用Python实现S形速度规划中的二分法与牛顿法 在工业机器人轨迹规划中,S形速度曲线因其加速度连续的特性,能有效减少机械冲击和振动。但实现完美的S形曲线规划,核心难点往往在于求解满足位移约束的非线性方程。本文…...

从零到一:手把手教你用国产化7K325T板卡搭建PCIe数据采集系统(含FMC子卡选型指南)

从零到一:手把手教你用国产化7K325T板卡搭建PCIe数据采集系统(含FMC子卡选型指南) 第一次拿到这块国产化7K325T板卡时,我盯着那个HPC规格的FMC接口看了半天——这个看似普通的连接器背后,藏着构建高性能数据采集系统的…...

零基础实战:用Clawdbot将Qwen3-VL:30B接入飞书,打造企业智能助手

零基础实战:用Clawdbot将Qwen3-VL:30B接入飞书,打造企业智能助手 1. 准备工作与环境确认 1.1 硬件环境检查 在开始前,请确保您的星图AI云实例满足以下最低配置要求: 组件最低要求推荐配置GPU显存24GB48GBCPU核心数8核20核系统…...

Unity UGUI Dropdown向上展开?一个Pivot和Anchor的调整就搞定(附完整C#代码)

Unity UGUI Dropdown向上展开的终极解决方案:Pivot与Anchor深度解析 在Unity的UI开发中,Dropdown组件是构建交互式菜单的常用工具。但当你需要在屏幕底部放置一个下拉菜单时,可能会遇到一个令人头疼的问题——默认向下展开的Dropdown列表会被…...

2025届学术党必备的十大AI辅助论文工具解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于大语言模型的智能写作辅助系统,是专为学术研究者设计的AI开题报告工具&#…...

新加坡求职股权激励介绍(股票期权Stock Options / ESOP、行权价Strike Price、限制性股票RSU、Phantom Shares虚拟股权)

文章目录新加坡求职必看:一文搞懂公司股权激励(股票小白入门)一、什么是股权激励?二、常见的三种股权形式(重点)1️⃣ 股票期权(Stock Options / ESOP)2️⃣ 限制性股票(…...

元数据管理难实现?看这一篇就足够

很多企业一提到元数据管理,第一反应都是平台、架构、上云、同步、治理,听起来方向都对,但真正推进起来,往往很容易卡住。系统越来越多,数据源越来越杂,链路一拉长,数据到底从哪来、被谁加工、给…...

【全网唯一国奖版】2026妈妈杯(MathorCup)C题中老年人群高血脂症的风险预警及干预方案优化高质量成品论文

💥💥💞💞欢迎阅读本文 ❤️❤️💥💥 🏆博主优势:🌞🌞🌞博文尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&#x…...

为什么92%的团队误判AI编码成本?3步穿透LLM幻觉层、Token开销、隐性重构成本(含审计SOP模板)

第一章:智能代码生成与代码成本分析 2026奇点智能技术大会(https://ml-summit.org) 现代软件工程正经历一场由大语言模型驱动的范式迁移:代码不再仅由开发者逐行书写,而是由上下文感知的智能体协同生成、验证与优化。与此同时,“…...

D3KeyHelper暗黑3宏工具完整指南:5分钟掌握游戏自动化终极技巧

D3KeyHelper暗黑3宏工具完整指南:5分钟掌握游戏自动化终极技巧 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 你是否厌倦了在暗黑破坏神…...

通用人工智能(AGI)与当前大模型的本质区别(2024权威白皮书级对比:自主目标生成、跨域因果推理、元认知闭环)

第一章:通用人工智能(AGI)与当前大模型的本质区别 2026奇点智能技术大会(https://ml-summit.org) 通用人工智能(AGI)指具备跨领域自主推理、目标建模、持续学习与具身适应能力的系统,其认知架构不依赖于海…...

3步解决方案:G-Helper快速修复华硕ROG笔记本屏幕色彩异常问题

3步解决方案:G-Helper快速修复华硕ROG笔记本屏幕色彩异常问题 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, St…...

从Transformer到Turing++:AGI技术路线图深度拆解(含12个被低估的底层瓶颈:世界模型稀疏性、跨模态信用分配、反事实因果引擎)

第一章:AGI技术路线图:从当前AI到通用智能 2026奇点智能技术大会(https://ml-summit.org) 当前人工智能系统在特定任务上已展现出超越人类的表现,但其本质仍是窄域智能(Narrow AI)——依赖大量标注数据、固定分布假设…...

别再手动点STK了!用MATLAB的ExecuteCommand批量生成AER和可见性报告(附完整代码)

用MATLAB自动化STK报告生成:从单次操作到批量处理的进阶指南 每次在STK软件里重复点击生成报告的操作,是不是已经让你感到疲惫不堪?想象一下,当你需要为20颗卫星和15个地面站生成数百份AER和可见性报告时,手动操作不仅…...

Redis 集群迁移与 Slot 重分配机制

Redis作为高性能的内存数据库,其集群模式通过分片(Slot)机制实现数据分布式存储。随着业务增长或节点调整,集群迁移与Slot重分配成为运维关键。本文将深入解析这一机制,帮助读者掌握动态扩缩容与故障恢复的核心技术。 …...

终极指南:如何用RL4CO快速解决复杂组合优化问题

终极指南:如何用RL4CO快速解决复杂组合优化问题 【免费下载链接】rl4co A PyTorch library for all things Reinforcement Learning (RL) for Combinatorial Optimization (CO) 项目地址: https://gitcode.com/gh_mirrors/rl/rl4co 你是否曾为物流配送路线规…...

华硕笔记本终极性能优化指南:GHelper完全配置教程

华硕笔记本终极性能优化指南:GHelper完全配置教程 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, …...

通往通用智能的终极路线图(2024-2035关键里程碑白皮书):含7项核心能力演进指标与国家级AGI投入对比数据

第一章:AGI技术路线图:从当前AI到通用智能 2026奇点智能技术大会(https://ml-summit.org) 当前人工智能系统在特定任务上已展现出超越人类的性能,但其本质仍是窄域、静态、数据密集型的模式匹配工具。迈向通用人工智能(AGI&#…...

基于AXI总线的Cortex-M3软核SoC设计与外设集成

1. Cortex-M3软核与AXI总线基础解析 第一次接触Cortex-M3软核是在三年前的一个物联网安全项目,当时需要在FPGA上实现一个轻量级加密处理器。和大多数嵌入式开发者一样,我之前主要使用现成的STM32系列芯片,直到真正动手在Vivado里搭建M3软核&a…...

如何零代码高效抓取网页数据:Web Scraper Chrome扩展完全指南

如何零代码高效抓取网页数据:Web Scraper Chrome扩展完全指南 【免费下载链接】web-scraper-chrome-extension Web data extraction tool implemented as chrome extension 项目地址: https://gitcode.com/gh_mirrors/we/web-scraper-chrome-extension Web S…...

ES-Client架构解析:轻量级Elasticsearch客户端的实现原理与深度集成

ES-Client架构解析:轻量级Elasticsearch客户端的实现原理与深度集成 【免费下载链接】es-client elasticsearch客户端,issue请前往码云:https://gitee.com/qiaoshengda/es-client 项目地址: https://gitcode.com/gh_mirrors/es/es-client …...

OPPO杀疯了!Find X9 Ultra硬刚哈苏,X10爆料直接拉满天花板

最近我被OPPO的操作惊到了——4月21日晚7点,OPPO要和哈苏搞联合发布会,主角是Find X9s Pro和Find X9 Ultra,更离谱的是,下一代Find X10的爆料居然提前炸了出来。手机影像圈的内卷早就不是新鲜事,但OPPO这次直接把哈苏的…...