当前位置: 首页 > news >正文

AQS的智慧:短暂自旋 + 深度阻塞

面试的时候被问到AQS怎么实现高性能?很多人可能一上来就背教科书,什么CLH队列、state变量。但AQS真正有意思的地方,在于它把"乐观"和"悲观"两种思路玩明白了。

先试试,不行再排队

AQS核心就两个东西:一个volatile的state变量表示状态,一个CLH双向队列管等待的线程。

线程来拿锁的时候,第一反应不是"我要等着",而是"我试试能不能直接拿到"。直接用CAS去改state,改成功就完事了,连阻塞都不用,全程无开销。

如果CAS失败了,说明有人在抢,这时候才去排队。

排队也讲究策略

入队也不是傻等着,AQS用的是无锁入队——用CAS把节点插到队列尾部。插队之后,线程会做一个自旋判断:如果自己是队列里的老二,就再tryAcquire一次。

为什么给第二次机会?赌的就是前一个线程刚好释放锁。概率虽小,但一旦赌中,成本极低,比直接park省了一次上下文切换。

自旋几次还是拿不到怎么办?调用LockSupport.park()把自己挂起。等前一个节点释放锁时把它唤醒。

总结一下

AQS这套组合拳打下来:

  1. CAS乐观尝试——能不动用阻塞就不动
  2. 无锁入队——快速进入排队系统
  3. 短暂自旋——给一次捡漏机会
  4. 最终park——竞争激烈时切到零消耗模式

说白了就是一句话:先试试,失败了再等,别一上来就把线程搞休眠。成本从低到高,层层递进,就是AQS性能还行的秘密。

http://www.jsqmd.com/news/450057/

相关文章:

  • 分布式鲁棒优化matlab编程:大规模清洁能源接入电网的含风-光-水-火多能源分布鲁棒动态最优...
  • 科学启蒙APP大揭秘!谁家才是孩子的最佳科学导师? - 品牌测评鉴赏家
  • ROS文件解读(package .xml--CMakeLists.txt)
  • 2026年数据恢复行业TOP5揭秘:谁才是性价比之王?
  • 计算机毕业设计之springboot基于Java的研究生导师管理信息系统的设计与实现
  • 航空航天项目如何用HTML5保障卫星数据文件夹分片上传的完整性?
  • 对比一圈后,更贴合继续教育的AI论文网站,千笔ai写作 VS 文途AI
  • 【Openclaw】初始配置
  • 位置服务平台解决的问题、适用人群,以及为何能够成立
  • 基于Cruise平台的P2构型并联混合动力汽车精准仿真模型 该模型集成了再生制动、最优制动力分...
  • JDK,Tomcat下载安装与环境变量配置以及启动IDEA
  • 计算机毕业设计springboot农产品批发市场管理系统 基于SpringBoot的农产品集散中心信息化管理平台 基于SpringBoot的生鲜农贸流通智慧监管系统
  • 项目3 | muduo网络库面试
  • 本期分享三家宝藏建站公司:需要搭建企业网站看过来
  • 2026NMN 行业标杆:W + 端粒塔凭硬核实力领跑,实测效果获高度认可 - 速递信息
  • 性别识别 _ VIT模型实现98.7%准确率的人脸性别分类检测[特殊字符][特殊字符]
  • ABC448
  • Codeforces 986A Fair 题解
  • Word文件转PDF、WPS在线打印、js提取Word文件内容、轻松将Word文档转为PDF
  • PB反编译工具,PB反编译大师,PB反编译器,PB代码恢复工具
  • 计算机毕业设计springboot基于java的大学生作业查重系统 基于Java的高校学生作业原创性检测平台 SpringBoot框架下的学术作业相似度分析系统
  • 三极管电平转换电路 - 指南
  • 计算机毕业设计springboot二手汽车交易平台 基于SpringBoot架构的二手车在线销售与信息管理系统 SpringBoot驱动的二手车辆数字化交易服务系统
  • 北师大版教材适配|5款宝藏虚拟实验品牌,老师家长直接抄作业 - 品牌测评鉴赏家
  • tt: as said
  • 快捷支付高并发处理与风控优化方案
  • 扩散模型虚拟试穿 IDM-VTON项目实战
  • 285_尚硅谷_反射的快速入门(1)
  • 如何评价ControlNet v1.1的InPaint版本?[特殊字符]
  • Git高效使用指南:从入门到精通