news 2026/5/1 8:46:05

大白话详解AQS

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大白话详解AQS

写这个是因为我学的时候,感觉原理太抽象了,还有最近有同事问我说原理听懂了,但是似懂非懂。
好的!咱们彻底抛开术语,用最接地气的大白话,像聊天一样把 Java 里的AQS(AbstractQueuedSynchronizer)给你讲透。保证你听完能跟朋友说清楚它到底是干啥的。


🧩 先说结论(30秒版):

AQS 就是 Java 里一个“智能排队系统”,专门管多个人抢同一个东西时,谁先用、谁等着、谁被叫醒。所有高级锁(比如 ReentrantLock)都是靠它在背后默默排队、叫号、维持秩序。


🏢 举个真实例子:公司只有一个打印机

假设你们公司只有一台打印机(这就是“共享资源”),但10个人都想打印。

  • 如果你直接冲过去按打印,发现有人正在用 → 你总不能一直站在旁边干等吧?那太浪费时间。
  • 聪明的做法是:拿个号,坐回工位,等打印机空了自动通知你

AQS 干的就是这个“拿号 + 通知”的活儿!


🔑 AQS 的三大核心,用人话解释:

1.一个“红绿灯”:state(状态)
  • 这是个数字,比如0表示打印机空闲,1表示有人在用。
  • 如果是你自己之前打印过(比如你点了“继续打印”),那就记成23……这叫“可重入”——你自己用不算抢。
  • 所有人都只能通过“安全方式”(比如原子操作)改这个数字,防止乱套。

✅ 简单说:state 就是资源当前的“使用计数器”。


2.一条“等候队列”:CLH 队列
  • 当你发现打印机正忙,AQS 会给你发个“排队号牌”(Node),把你放进一条队伍里。
  • 这条队伍是先进先出的:先来的先打,后来的靠后。
  • 你拿到号牌后,就回去睡觉(线程阻塞),不占 CPU,省电又安静。
  • 队伍是双向的,方便有人临时有事(比如超时取消),快速把他从队伍里删掉。

✅ 简单说:队列就是“等打印机的人名单”,按顺序排好,睡着等叫号。


3.一套“规则模板”:模板方法

AQS 自己不决定“谁能用打印机”,而是说:

“你们(比如 ReentrantLock、Semaphore)来定规则!
只要告诉我两件事就行:

  • 怎么判断能不能用?(tryAcquire)
  • 用完怎么释放?(tryRelease)”

比如:

  • ReentrantLock说:“只有没人用 or 是我自己用,才能进。”
  • Semaphore(2)说:“最多两人同时用,多了就等。”

AQS 不管规则,只负责执行:按你的规则检查 → 能用就用 → 不能用就排队 → 用完叫下一个人。

✅ 简单说:AQS 是“服务员”,你定规矩,它干活。


⚙️ 它是怎么工作的?(流程图式大白话)

  1. 你想用打印机(调用 lock())
    → AQS 问:“现在空吗?”(查 state)
    • 如果空 → 直接让你用,state 变成 1。
    • 如果不空 → 给你发号牌,加入队伍末尾,然后让你“睡一觉”。
  2. 别人用完了(调用 unlock())
    → AQS 把 state 减 1,如果变回 0,就喊:“下一位!” → 把队伍第一个“睡着的人”叫醒(unpark),让他去用。
  3. 如果你等太久不想等了(超时/中断)
    → AQS 把你的号牌撕掉(CANCELLED),从队伍里移除,不耽误别人。

🤔 公平 vs 不公平?就像食堂打饭!

  • 公平模式:严格按排队顺序。哪怕窗口刚空,后面新来的人也得站到队尾。
  • 非公平模式(默认):窗口一空,新来的人可以直接插队抢
    → 虽然“不公平”,但整体打饭更快(减少来回叫号的开销)。

Java 默认选“非公平”,因为性能更好,除非你特别要求公平。


🌟 为什么 AQS 牛?

  • 高效:不用轮询(while 循环傻等),而是“睡着等通知”,省 CPU。
  • 灵活:一套系统,既能管“一人用”(锁),也能管“多人用”(信号量)。
  • 可靠:FIFO 排队,不会饿死;支持中断、超时,很人性化。
  • 复用:所有并发工具都基于它,代码统一,bug 少。

💡 最后总结(记住这句就够了):

AQS 就是一个聪明的“排队机器人”:
它用一个数字(state)看资源有没有人用,
用一条队列管着所有等着的人,
谁想用?先试试;不行?排队睡觉;
用完的人一走,它就叫下一个起来干活。
Java 里那些高大上的锁,其实都是靠它在背后当“后勤部长”。

这样讲,是不是一下子明白了?😄还不明白欢迎私信我,获取有其他想用打白话讲的原理什么的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:00:55

AIGC 的“数学心脏”:一文读懂 CANN ops-math 通用数学库

目录 一、 什么是 ops-math? 二、 核心能力:AIGC 的三大支柱 三、 开发者友好:从 0 到 1 的最佳入口 四、AIGC 场景实战:自定义一个“噪声注入”算子 五、 结语 在 AIGC(生成式 AI)的宏大建筑中&#…

作者头像 李华
网站建设 2026/5/1 8:01:47

数字图像处理篇---HSV颜色空间

如果说RGB和CMYK是给机器和设备用的,那HSV就是为人类直觉设计的。一句话核心HSV按照人类选择颜色的思维方式,将颜色分解为:【色调】、【饱和度】、【明度】三个直观维度。1. 为什么需要HSV?想象一下你想在RGB模式下调出一个“浅一…

作者头像 李华
网站建设 2026/4/24 9:52:58

java+vue基于springboot框架的企业进销存管理系统

目录 系统概述技术架构核心功能创新点应用价值 开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统概述 基于SpringBoot和Vue的企业进销存管理系统是一个现代化的全栈解决方案,整合后端Java技术与前端Vue框架&…

作者头像 李华
网站建设 2026/5/1 8:14:27

java+vue基于springboot框架的全国非物质文化遗产展示平台

目录全国非物质文化遗产展示平台摘要技术架构核心功能模块创新特色应用价值开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!全国非物质文化遗产展示平台摘要 该平台基于SpringBoot后端框架和Vue前端框架构建,旨在数…

作者头像 李华
网站建设 2026/4/29 1:05:21

IBM投资生成式AI应用设计初创公司Anima

IBM公司正通过投资热门的"设计转代码"初创公司Anima App Inc.来推进新兴的"氛围编码"趋势,这是该公司帮助重塑企业在人工智能时代设计、构建和交付数字产品方式努力的一部分。氛围编码已成为软件开发中一股极具颠覆性的力量,使开发者…

作者头像 李华