发布时间:2026/6/15 9:44:33
AQS 是啥
AQS 在 Java 并发里通常指 AbstractQueuedSynchronizer抽象队列同步器。它是 JUCjava.util.concurrent里很多锁和同步工具的底层框架。ReentrantLock、Semaphore、CountDownLatch、ReentrantReadWriteLock等都基于它实现。一、一句话理解AQS 用「一个状态变量 一个等待队列」管理线程抢资源、排队、唤醒的通用模板。你可以把它想成银行叫号系统state → 当前还有几个窗口/名额比如锁是否被占用CLH 队列 → 没抢到的人排队park/unpark → 叫到号唤醒你二、核心组成1.state状态一个volatile int表示同步状态含义由子类定义工具state 含义ReentrantLock0未锁0被锁可重入次数Semaphore剩余许可数CountDownLatch还剩几个线程没完成ReentrantReadWriteLock高 16 位读锁数低 16 位写锁数2. CLH 双向队列抢不到的线程会封装成 Node 放进 FIFO 队列里等待避免大量线程空转忙等。3. 模板方法子类只需实现两个方法// 尝试获取资源抢锁/抢许可 protected boolean tryAcquire(int arg) // 尝试释放资源放锁/还许可 protected boolean tryRelease(int arg)AQS 负责通用的排队、阻塞、唤醒逻辑。三、工作流程以独占锁为例获取锁简化理解public final void acquire(int arg) { // 1. 先试着抢 if (!tryAcquire(arg)) { // 2. 抢不到就入队 // 3. 自旋检查前驱是否是队头 // 4. 还不行就 park 挂起 } }释放锁public final boolean release(int arg) { if (tryRelease(arg)) { // 唤醒队列里下一个等待线程 unparkSuccessor(head); return true; } return false; }四、两种模式模式说明典型实现独占模式Exclusive同一时刻只有一个线程能拿到ReentrantLock、ReentrantReadWriteLock写锁共享模式Shared多个线程可同时拿到Semaphore、CountDownLatch、读写锁读锁五、和synchronized的区别synchronized基于 AQS 的锁如ReentrantLock实现JVM 内置监视器锁Java 代码实现灵活性自动加锁解锁可tryLock、可中断、可超时、可公平队列依赖 JVM 实现明确的 CLH 队列条件变量只有一个wait/notify可有多个ConditionReentrantLock比synchronized功能多就是因为 AQS 提供了可扩展的模板。六、代码里长什么样ReentrantLock内部有个继承 AQS 的同步器// 简化示意帮助理解 class Sync extends AbstractQueuedSynchronizer { protected boolean tryAcquire(int acquires) { final Thread current Thread.currentThread(); int c getState(); if (c 0) { // 没人占锁CAS 抢 if (compareAndSetState(0, acquires)) { setExclusiveOwnerThread(current); return true; } } else if (current getExclusiveOwnerThread()) { // 重入同一线程再加锁 setState(c acquires); return true; } return false; } protected boolean tryRelease(int releases) { // 释放锁state 减到 0 时真正放开 ... } }业务代码只管lock()/unlock()排队和唤醒由 AQS 统一处理。七、为什么重要1. 面试常考AQS 是什么ReentrantLock和synchronized区别公平锁 / 非公平锁怎么实现2. 理解并发工具的原理知道 AQS 后Semaphore、CountDownLatch就不再是「黑盒 API」。3. 和项目的关系场景可能用到接口限流Semaphore等待多个任务完成CountDownLatch需要可中断/超时加锁ReentrantLock线程池底层也依赖 AQS 协调你们前面聊的数据库锁、分布式锁、事务解决的是数据层并发AQS 解决的是单机 JVM 内线程同步层次不同但都服务于「多线程不打架」。八、常见考点速记AQS 三件套state → 同步状态CLH 队列 → 等待线程排队CAS park → 抢资源 / 阻塞 / 唤醒子类实现tryAcquire → 怎么抢tryRelease → 怎么放基于 AQS 的工具ReentrantLockReentrantReadWriteLockSemaphoreCountDownLatchCyclicBarrier内部也用 ReentrantLock Condition九、一句话总结AQS 是 Java 并发包的「发动机」用 state 表示资源状态用队列管理等待线程子类只定义「怎么抢、怎么放」其余排队、阻塞、唤醒都由它统一搞定。

相关新闻

从Pre-layout到Post-CTS:一张图搞懂set_clock_transition的生命周期与失效时机
2026/6/15 3:00:30

从Pre-layout到Post-CTS:一张图搞懂set_clock_transition的生命周期与失效时机

从Pre-layout到Post-CTS:深入解析set_clock_transition的约束生命周期在数字芯片设计的物理实现流程中,时钟约束的管理往往成为区分资深工程师与初学者的关键分水岭。当我们谈论set_clock_transition这个看似简单的SDC命令时,实际上触及的是整…

阅读更多
别再盲目试工具了!2026这3款热门降AI工具亲测好用,免费指令公开
2026/6/14 17:12:36

别再盲目试工具了!2026这3款热门降AI工具亲测好用,免费指令公开

为了给文章降AI,从自己手动修改,到各种免费降AI率工具,相信大家都用过很多。其实很多时候是咱们自己写的内容用词太规范被检测出AI率高,这时候选对工具就显得尤为重要。更坑的是,市面上很多号称能降低AI的工具&#xf…

阅读更多
告别卡顿!详解CesiumJS 114版本中dynamicScreenSpaceError等性能优化新特性
2026/6/14 15:32:47

告别卡顿!详解CesiumJS 114版本中dynamicScreenSpaceError等性能优化新特性

告别卡顿!详解CesiumJS 114版本中dynamicScreenSpaceError等性能优化新特性在三维地理信息系统的开发中,性能优化始终是开发者面临的核心挑战之一。随着CesiumJS 114版本的发布,一系列针对性的性能改进特性被引入,为构建流畅、高效…

阅读更多
Windows Agent Arena任务开发指南:创建自定义桌面自动化任务的完整流程
2026/6/15 8:57:56

Windows Agent Arena任务开发指南:创建自定义桌面自动化任务的完整流程

Windows Agent Arena任务开发指南:创建自定义桌面自动化任务的完整流程 【免费下载链接】WindowsAgentArena Windows Agent Arena (WAA) 🪟 is a scalable OS platform for testing and benchmarking of multi-modal AI agents. 项目地址: https://git…

阅读更多
Golf MCP框架性能优化:10个提升服务器效率的技巧
2026/6/15 8:57:56

Golf MCP框架性能优化:10个提升服务器效率的技巧

Golf MCP框架性能优化:10个提升服务器效率的技巧 【免费下载链接】authed Production-Ready MCP Server Framework • Build, deploy & scale secure AI agent infrastructure • Includes Auth, Observability, Debugger, Telemetry & Runtime • Run real…

阅读更多
business-machine-learning入门:会计部门的机器学习实践与案例分析
2026/6/15 8:57:56

business-machine-learning入门:会计部门的机器学习实践与案例分析

business-machine-learning入门:会计部门的机器学习实践与案例分析 【免费下载链接】business-machine-learning A curated list of practical business machine learning (BML) and business data science (BDS) applications for Accounting, Customer, Employee,…

阅读更多
沉浸式翻译使用指南:解决99%常见问题的完整方案
2026/6/15 8:57:56

沉浸式翻译使用指南:解决99%常见问题的完整方案

沉浸式翻译使用指南:解决99%常见问题的完整方案 【免费下载链接】immersive-translate 沉浸式双语网页翻译扩展 , 支持输入框翻译, 鼠标悬停翻译, PDF, Epub, 字幕文件, TXT 文件翻译 - Immersive Dual Web Page Translation Extension 项…

阅读更多
AdClose开发者视角:Hook逻辑与广告拦截实现原理解析
2026/6/15 8:57:56

AdClose开发者视角:Hook逻辑与广告拦截实现原理解析

AdClose开发者视角:Hook逻辑与广告拦截实现原理解析 【免费下载链接】AdClose Block ads and remove app limit for Xposed. 项目地址: https://gitcode.com/gh_mirrors/ad/AdClose AdClose是一款基于Xposed框架的广告拦截工具,能够有效阻止应用广…

阅读更多
InfiniBand网络运维避坑指南:为什么你的Mellanox SM高可用配置总失败?
2026/6/15 7:57:56

InfiniBand网络运维避坑指南:为什么你的Mellanox SM高可用配置总失败?

InfiniBand网络高可用实战:破解Mellanox SM配置失败的五大关键陷阱 当你深夜被警报惊醒,发现整个高性能计算集群因为InfiniBand子网管理器(SM)高可用(HA)配置失效而陷入瘫痪时,那种绝望感只有经…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/14 0:57:30

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/14 0:57:30

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/14 0:57:30

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
TEKLauncher:终极ARK模组管理与性能优化解决方案
2026/6/15 0:57:55

TEKLauncher:终极ARK模组管理与性能优化解决方案

TEKLauncher:终极ARK模组管理与性能优化解决方案 【免费下载链接】TEKLauncher Launcher for ARK: Survival Evolved 项目地址: https://gitcode.com/gh_mirrors/te/TEKLauncher 你是否为ARK: Survival Evolved复杂的模组管理和服务器连接问题而烦恼&#xf…

阅读更多
如何3分钟免费解锁Cursor Pro:终极AI编程助手破解方案
2026/6/15 0:57:55

如何3分钟免费解锁Cursor Pro:终极AI编程助手破解方案

如何3分钟免费解锁Cursor Pro:终极AI编程助手破解方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…

阅读更多
21.2 mcp-server-chart 图表化作用
2026/6/15 0:57:55

21.2 mcp-server-chart 图表化作用

如何检查 langchain_mcp_adapters 版本和 antv/mcp-server-chart 安装 1. 检查 langchain_mcp_adapters 版本 在终端(确保已激活虚拟环境)中运行: pip show langchain_mcp_adapters输出示例: Name: langchain-mcp-adapters Ve…

阅读更多
GIT修改用户名
2026/6/14 11:53:59

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/15 2:21:34

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/14 15:49:58

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多