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

AQS(AbstractQueuedSynchronizer,抽象队列同步器)在JDK1.5中由Doug Lea实现,它也是JUC包的底层基石,是一套用来实现锁、同步器的模板框架。

1、重识AQS

我们常见的几个类,如ReentrantLock、Semaphore和CountDownLatch,它们表面上功能各不相同,但是它们的核心设计都是基于AQS实现的,那么什么是AQS呢?通过一个简答的生活中例子来说明,如下图所示:

假设我们去一些政府机构办理业务,假设今天只有一个柜台对外开放并且柜台前有一个等候区,这里就类似我们的AQS的核心模型,在AQS中的state类似柜台的状态
private volatile int state;
AQS内部的state变量,我们可以把它想象成柜台叫号机,当state=0表示柜台空闲状态,此时柜台资源可用提供服务,此时叫号机呼叫用户A上来办理业务;当用户A在办理业务的时候,此时state=1,表示柜台有人在办理业务,后续的用户需要等待用户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实现了不同功能:

(a)ReentrantLock独占所,它的规则是:我占了别人就不能占有,所以他的tryAcquire()逻辑是只要state是0,表示线程就可以抢到了锁,然后将state值改成1,这样别人就无法再抢到锁。

(b)CountDownLatch共享锁,它的规则是:它的逻辑是只有当state减到了0,所有的线程才能一起通过。

我们都知道,没有拿到锁的线程会在队列中等待获取锁,那么排在队列中的线程是在“死循环”空转?

其实,在队列中这些线程它们都在睡眠挂起状态,使用到了一个秘密大武器,即就是LockSupport.park(),当线程需要等待时,AQS会调用这个方法,此时它不是空转,而是直接向操作系统发指令,核心的内容是:“请把这个线程挂起,暂时不要给它分配任何CPU时间片”。

然后使用LockSupport.unpark(thread),当锁被释放时,持有锁的线程会调用这个方法,“唤醒"队列中的下一个等待线程。这种线程调度由操作系统内核完成,几乎不消耗CPU资源。

3、AQS加锁到释放的全过程

(1)线程A到来的时候,首先拿到state=0,抢到锁后设为state=1,开始执行自己的业务逻辑

(2)线程B到了,检查state的时候,发现state=1,自己不能抢到锁。

(3)AQS把线程B打包成node放到队列里

(4)AQS调用LockSupport.park(), 线程B在队列中处于睡眠状态。

(5)线程A执行完自己的业务逻辑后,将state改成0

(6)AQS发现队列里还有等待执行任务的线程,于是调用LockSupport.unpark(thread)

(7)线程B被唤醒后,拿到state=0,设置state=1,开始执行自己的业务逻辑。

总结:

(1)AQS用state标识是否可以获取锁(state=0标识可以获取锁),用CLH队列存放无法获取锁的线程等待区

(2)AQS用了模板方法模式,实现了父类管排队,子类管规则

(3)AQS用了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%免费】

相关新闻

Java程序员转AI开发:不用先清空重学,重点补这4项能力

Java程序员转AI开发:不用先清空重学,重点补这4项能力

/* 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 18:40:37 阅读更多 →
《软件工程原理与实践》Lab3——卷积神经网络

《软件工程原理与实践》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 18:39:36 阅读更多 →

最新新闻

Web安全三要素:SQL注入、XSS与CSRF的真实场景解析

Web安全三要素:SQL注入、XSS与CSRF的真实场景解析

1. 为什么“学完就忘”的安全课,从来不是知识的问题,而是场景的缺失你有没有过这种经历:翻完一本《Web安全攻防实战》,笔记记得密密麻麻,OWASP Top 10 背得滚瓜烂熟,可真拿到一个真实上线的后台系统&#x…

2026/10/19 19:35:53 阅读更多 →
指数加权平均:从温度平滑到Adam优化器的核心机制

指数加权平均:从温度平滑到Adam优化器的核心机制

1. 从一个温度曲线说起:为什么优化算法需要“加权平均”先说一个我当年刚接触深度学习时的困惑:处理时间序列数据,比如某地一年的每日温度,数据往往带有很大的随机噪声。今天30度,明天25度,后天突然跳到31度…

2026/10/19 19:35:53 阅读更多 →
Popek-Goldberg定理:虚拟化可行性的数学基石

Popek-Goldberg定理:虚拟化可行性的数学基石

1. 项目概述:为什么“Popek和Goldberg定理”至今仍是虚拟化技术的基石你可能在读某篇关于云平台底层架构的文章时,偶然看到“Popek和Goldberg定理”这个名词,旁边还跟着一句“该定理证明了虚拟机监控器(VMM)的可行性”…

2026/10/19 19:35:53 阅读更多 →
Windows 开源输入法选型与配置实战:从 IME 机制到小狼毫

Windows 开源输入法选型与配置实战:从 IME 机制到小狼毫

如果你只是聊聊天、敲敲普通文档,Windows 自带的输入法确实够用。可一旦你需要在 Windows 上写代码、维护长篇文档、录入特殊符号,甚至同时保持拼音、五笔、注音几套输入习惯,自带输入法的短板就会一点点冒出来:词库排序不顺手、自…

2026/10/19 19:34:52 阅读更多 →
AI如何降低网店获客成本?从自动回复到意图识别的转化实战

AI如何降低网店获客成本?从自动回复到意图识别的转化实战

在这个流量越来越贵、平台规则越来越细的时候,很多做网店的朋友问我:AI到底能不能帮我把获客成本降下来?我的回答是,能,但前提是你得把它当成一个可以训练的销售助理,而不是许愿池里的锦鲤。今天我就拿大家…

2026/10/19 19:33:50 阅读更多 →
交通标志检测识别系统:YOLOv8+OpenCV+PyQt5实战

交通标志检测识别系统:YOLOv8+OpenCV+PyQt5实战

1. 方案选型与实际价值先说结论:这个项目是很多人入手深度学习落地时的首选练手目标。原因很简单——交通标志检测有真实场景价值,模型效果直观,又能把算法、界面、图像处理全部串起来。用 Python 作为底座,YOLOv8 负责目标检测&a…

2026/10/19 19:33:50 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* 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 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* 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 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* 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 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/18 12:16:16 阅读更多 →