3分钟理清AQS与其子类的那些事

发布时间:2026/10/19 18:46:19

3分钟理清AQS与其子类的那些事 AQSAbstractQueuedSynchronizer抽象队列同步器在JDK1.5中由Doug Lea实现它也是JUC包的底层基石是一套用来实现锁、同步器的模板框架。1、重识AQS我们常见的几个类如ReentrantLock、Semaphore和CountDownLatch它们表面上功能各不相同但是它们的核心设计都是基于AQS实现的那么什么是AQS呢通过一个简答的生活中例子来说明如下图所示假设我们去一些政府机构办理业务假设今天只有一个柜台对外开放并且柜台前有一个等候区这里就类似我们的AQS的核心模型在AQS中的state类似柜台的状态private volatile int state;AQS内部的state变量我们可以把它想象成柜台叫号机当state0表示柜台空闲状态此时柜台资源可用提供服务此时叫号机呼叫用户A上来办理业务当用户A在办理业务的时候此时state1表示柜台有人在办理业务后续的用户需要等待用户A办理业务结束。 用户A办理业务中其他的用户只能在等候区排队类比AQS等候区这就是AQS中CLH队列双向等待队列如下图所示CLH队列是一个双向的链表每个排队的线程都被封装成一个Node对象CLH队列中是先进先出机制。AQS中线程完整的流程如下图所示当一个线程A过来的时候线程A检查state是不是0如果是0表示线程A获取到了锁此时立马把state改成1然后开始执行业务逻辑如果state是1表示线程A获取锁失败此时线程A打包成一个Node然后去CLH队列队尾排队。2、AQS的设计Java并发包的作者Doug Lea设计的非常优秀他把AQS中state和队列这2个东西抽出来放在父类里这是经典的模板方法设计模式如下图所示AQS作为父类它把最通用的活全部做好了如线程的排队、入队、出队、阻塞线程和唤醒线程这些非常复杂的逻辑都写好了这样子类如ReentrantLock它只需要实现一些最简单的逻辑如修改state的值子类只需要实现tryAcquire()尝试获取使用tryRelease()尝试释放子类使用这两个方法就能修改state的值。 同样使用AQS作为父类ReentrantLock和CountDownLatch实现了不同功能aReentrantLock独占所它的规则是我占了别人就不能占有所以他的tryAcquire()逻辑是只要state是0表示线程就可以抢到了锁然后将state值改成1这样别人就无法再抢到锁。bCountDownLatch共享锁它的规则是它的逻辑是只有当state减到了0所有的线程才能一起通过。我们都知道没有拿到锁的线程会在队列中等待获取锁那么排在队列中的线程是在“死循环”空转其实在队列中这些线程它们都在睡眠挂起状态使用到了一个秘密大武器即就是LockSupport.park()当线程需要等待时AQS会调用这个方法此时它不是空转而是直接向操作系统发指令核心的内容是“请把这个线程挂起暂时不要给它分配任何CPU时间片”。然后使用LockSupport.unpark(thread)当锁被释放时持有锁的线程会调用这个方法“唤醒队列中的下一个等待线程。这种线程调度由操作系统内核完成几乎不消耗CPU资源。3、AQS加锁到释放的全过程1线程A到来的时候首先拿到state0抢到锁后设为state1开始执行自己的业务逻辑2线程B到了检查state的时候发现state1自己不能抢到锁。3AQS把线程B打包成node放到队列里4AQS调用LockSupport.park() 线程B在队列中处于睡眠状态。5线程A执行完自己的业务逻辑后将state改成06AQS发现队列里还有等待执行任务的线程于是调用LockSupport.unpark(thread)7线程B被唤醒后拿到state0设置state1开始执行自己的业务逻辑。总结1AQS用state标识是否可以获取锁state0标识可以获取锁用CLH队列存放无法获取锁的线程等待区2AQS用了模板方法模式实现了父类管排队子类管规则3AQS用了LockSupport.park()和LockSupport.unpark(thread)来实现高效的线程阻塞和唤醒。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
延伸阅读

更多相关文章

2026/10/19 18:41:18

m3u8视频下载全攻略:从HLS协议原理到在线工具实操与避坑指南

简介:这是一款面向流媒体视频下载需求的 m3u8 在线下载与提取工具,适合需要将 HLS 流媒体保存为本地视频的普通用户、视频运营人员及前端开发者。工具围绕 M3U8 清单解析、TS 分片多线程下载和自动合并设计,同时提供网页端交互界面&#xff0…

2026/10/19 18:41:18

《软件工程原理与实践》Lab3——卷积神经网络

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

2026/10/19 19:52:02

毕业论文开题报告AI优化指南:9款工具组合与提示词实践

毕业季又到了,朋友圈里一片哀嚎。我发现大家用AI工具写开题报告,基本就两种用法:要么直接复制粘贴标题让AI代写全文,要么把AI当成搜索引擎问几个问题。结果交上去的初稿被导师批得体无完肤,要么内容空泛不知所云&#…

2026/10/19 19:52:02

Caveman提示词压缩法:大模型API输出Token成本直降80%

前阵子被大模型API账单吓到了,一个批量打标任务跑下来,几千块钱说没就没。细看消耗明细,真正的开销大头不在输入,反而在输出这一侧——模型每次回答都带着一大段解释、铺垫、客套话,一句话能说清的事硬要写一百个Token…

2026/10/19 19:52:02

Windows客户端与Linux服务端跨平台联调:从环境差异到根因定位

上周五下午快下班的时候,运维转过来一个问题:某桌面客户端连不上刚上线的 Linux 服务端,界面一直转圈,过几分钟才弹一个超时提示。我跨过半个工区去看,发现客户端同事已经在重新编译代码,准备打印一堆调试信…

2026/10/19 19:52:02

PADS、AD、Cadence 互转实战:四条链路版本配置与避坑指南

简介:这份文档面向使用PADS、Altium Designer与Cadence的电子工程师及PCB设计学习者,聚焦不同EDA工具之间设计文件互操作的痛点,系统梳理了PADS转AD、AD转Cadence、AD转PADS、Cadence转PADS等常见转换路径。内容覆盖原理图与PCB两条主线&…

2026/10/19 19:46:54

低空航拍路面裂缝检测数据集:VOC+YOLO双格式标注与训练实战

低空航拍路面裂缝类型检测数据集,这个项目我前后折腾了一个多月,最终整理出3391张带完整标注的有效样本,并按VOCYOLO双格式交付。起因很简单:市场上公开的路面裂缝数据集大多来自地面手持相机或车载视角,真正贴合无人机…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/19 0:04:56

悟空开源无代码平台实战:从实体建模到应用设计避坑指南

简介:基于悟空开源无代码平台的多种应用设计源码,面向希望在不编写代码的情况下快速搭建CRM、HRM、财务系统、ERP、SRM等业务应用的企业与技术人员,通过拖放式界面和内置模板即可完成应用定制与部署。压缩包共697个文件,约10.74MB…

2026/10/19 0:04:56

基于.NET9的多租户权限系统:数据权限与动态API落地实践

简介:这份资源是一套面向 .NET 与 Vue 全栈开发者的中台权限管理系统,后端基于 .Net9,前端采用 Vue3 Element Plus,并配套 uniapp uviewui 移动端方案,实现前后端分离。系统覆盖多租户隔离、数据权限、动态 Api、任务…

2026/10/19 0:04:56

场地预约小程序毕设实战:SSM+微信小程序+MySQL数据库设计到避坑

简介:面向毕业设计场景的场地预约小程序完整项目,基于微信小程序SSMMySql技术栈开发,适合计算机相关专业学生作为选题参考、功能扩展或二次开发起点。系统实现场地类型管理、场地管理、预约管理、取消申请与押金退回等功能,分为管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑