news 2026/4/19 21:28:21

大白话详解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/4/18 3:50:09

Linux 编辑器入门:nano 与 vim 的区别与选择指南

在学习 Linux 或进行服务器开发时,我们经常会遇到两个命令:nano a.txt vim a.txt很多初学者会疑惑: 它们都是打开文件编辑吗?有什么区别?我该用哪个?本文一次性讲清楚 nano 与 vim 的定位、区别、使用场景。…

作者头像 李华
网站建设 2026/4/18 3:50:54

连续两年制霸春节档 王丹妮《夜王》今日定档大年初四

继2025年主演的贺岁动作喜剧《临时决斗》夺得香港电影春节档票房冠军后,演员王丹妮再次以强势姿态回归农历新年。由《毒舌律师》金牌班底打造,黄子华、郑秀文领衔主演的爆笑粤语喜剧《夜王》于今日正式官宣,将于大年初四(2月20日&…

作者头像 李华
网站建设 2026/4/18 3:49:40

Python基于Vue的婚纱摄影预订管理系统 django flask pycharm

这里写目录标题项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我 项目介绍 随着我国经…

作者头像 李华
网站建设 2026/4/18 3:50:17

基于对抗领域自适应的风电机组故障诊断方法研究

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅成品或者定制,扫描文章底部微信二维码。1)小波多尺度加权卷积神经网络的单机组诊断模型。风电机组监测系统采集的时序信号具有…

作者头像 李华
网站建设 2026/4/18 8:42:06

微软工程师5分钟内烧坏树莓派5开发板

微软对于意外故障并不陌生,现在该公司的一名工程师又给故障清单添加了一台树莓派。微软Windows部门首席工程经理史蒂夫西富斯表示,他在5分钟内就让一台树莓派5冒出了魔法烟雾。除了日常负责身份验证工作外,西富斯也喜欢动手摆弄硬件。他并非个…

作者头像 李华
网站建设 2026/4/17 12:44:16

如何关闭Windows自动更新?【图文详解】禁止win11自动更新

其实很多人想关闭Windows系统自动更新,就是想避免麻烦。。。 现在提供一下六种方法,从零基础到高阶操作,亲测有效!!!!! 推荐方法六,简单易用! 一&#xff1…

作者头像 李华