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

HoRain云--揭秘AQS:ReentrantLock高效锁机制

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

🔧 加锁流程详解

🔄 解锁与传递

⚖️ 关键机制与设计思想

💡 总结与实践


AbstractQueuedSynchronizer(AQS)是Java并发包中构建锁和同步器的核心框架。理解它最好的方式,就是通过一个具体的锁实现来看其运作机制。下面这个表格清晰地展示了ReentrantLock与AQS的协作关系,帮你快速抓住核心。

组件/角色

ReentrantLock中的体现

核心职责

AQS (AbstractQueuedSynchronizer)

内部类Sync继承自 AQS

提供同步状态管理线程阻塞队列(CLH变体)​ 和线程阻塞/唤醒的底层框架。

State (同步状态)

AQS 中的volatile int state字段

ReentrantLock而言,state=0表示锁空闲;state>0表示锁被占用,且数值代表锁的重入次数

独占模式 (Exclusive)

ReentrantLock是独占锁

同一时间只能有一个线程获取锁。

尝试获取/释放锁 (TryAcquire/Release)

Sync的子类 (NonfairSync,FairSync) 实现

定义公平/非公平策略下,如何具体地获取和释放锁。

线程排队队列 (CLH Queue)

AQS 内部维护的 FIFO 双向链表(head,tail

存放获取锁失败的线程,形成一个等待队列,确保锁分配的公平性。

🔧 加锁流程详解

当你调用lock.lock()时,其内部流程清晰地展示了AQS如何运作。

  1. 首次争抢(非公平锁为例)

    线程A首先会直接尝试利用CAS操作将state从0改为1。如果成功,表示它立刻抢到了锁,并将独占线程设置为自身。这种“插队”行为是非公平锁的典型特征,旨在减少线程切换的开销,提升性能。

  2. 争抢失败,进入队列

    如果线程A已持有锁,此时线程B来争抢,CAS操作会失败。随后会调用AQS的acquire(1)方法。这个方法是一个模板方法,其核心逻辑是:

  3. 处理可重入

    如果线程A已经持有锁,再次调用lock(),这就是可重入。此时,tryAcquire会检查当前线程是否是独占线程,如果是,则将state简单地加1。因此,state的值就代表了该线程重入锁的次数。

🔄 解锁与传递

解锁过程(lock.unlock())则相对直接,展示了锁如何安全地在线程间传递。

  1. 释放锁

    线程A调用unlock(),会触发tryRelease方法。该方法会将state减1。只有当state被减为0时,才表示锁被完全释放(即重入次数已清零)。

  2. 唤醒后继

    如果锁被完全释放,AQS会找到等待队列的头节点(它是一个空节点或已取消的节点),然后唤醒其后的第一个有效等待节点(即线程B)。

  3. 后继线程获取锁

    线程B被唤醒后,会从之前acquireQueued中的阻塞点继续执行,再次尝试tryAcquire。此时锁已被释放,线程B成功获取锁,并将自己设置为新的头节点,从而出队。

⚖️ 关键机制与设计思想

💡 总结与实践

AQS通过一个状态(state)​ 和一个FIFO队列,构建了一个强大且灵活的同步器框架。ReentrantLock只是其一个经典应用。基于AQS,你还可以实现信号量(Semaphore)、栅栏(CountDownLatch)等复杂的同步工具。

简单来说,AQS就像是一个高度定制化的“排队管理器”:它定义好了排队的规则、休息区的管理以及何时叫下一个号的流程,而具体的“服务窗口”(如ReentrantLock)则只需决定什么样的顾客(线程)可以被立刻服务(获取锁)。

希望这个结合ReentrantLock的解析能帮助你透彻地理解AQS的工作原理!如果你对AQS的共享模式(如Semaphore)或Condition条件队列感兴趣,我们可以继续深入探讨。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

相关文章:

  • 1999-2024年 上市公司-微观企业劳动力生产率数据(数据+代码+文献)
  • JAVA核心技术实战
  • 井通 CUTLASS 01章:静看 cutlass 之 01 记 目录结构
  • 收藏备用|大模型知识蒸馏入门详解(小白/程序员必看,附经典文献+行业趋势)
  • 深度测评 10个降AIGC平台:专科生必看!降AI率全维度对比与推荐
  • 2026年论文AI工具深度实测:拒绝“假文献”,这3款才是本硕博全流程救星! - 沁言学术
  • 2026年靠谱的超薄三节隐藏轨/液压三节隐藏轨直销厂家推荐选哪家(更新) - 行业平台推荐
  • 从零开始!用MCP架构打造强大Agentic RAG系统,小白也能轻松上手(收藏备用)
  • 53、AI大模型技术之NLP核心(6、Transformer模型核心结构以及编码器)
  • 2026年比较好的液压上翻门/缓冲上翻门精选供应商推荐口碑排行 - 行业平台推荐
  • 硬核工控:手搓企业级边缘网关(从硬件选型到云端对接全通关)
  • 收藏!算法工程师薪资全景解析(含大模型岗),小白/程序员必看
  • 好写作AI:别让灵感死在地铁里!把碎片时间变成你的“创作金矿”
  • 学长亲荐!千笔,专科生论文写作神器
  • 探寻河南靠谱的家用净水设备生产厂家 - 工业推荐榜
  • 好写作AI体验手记:第一天,我竟然干掉了拖延一周的“写作债”
  • 基于python的海鱼类科普网站的 海洋生物知识科普系统
  • 2026年专业微孔曝气器定制厂家综合评估与推荐 - 2026年企业推荐榜
  • 改稿速度拉满 9个降AI率网站深度测评与推荐
  • 2026年风冷冷却器性价比排名前十,曲阜久鼎酿酒设备上榜 - 工业品网
  • 2026年公众号运营新风口:3大收益前景与实操指南 - peipei33
  • 2026年光伏板拆解处理厂家TOP5,聚焦太阳能板高值化与层压材料分离技术突破 - 深度智识库
  • 好写作AI:智能校对,你文章的“最后一道防线”,专治各种公开处刑
  • 2026年质量好的橱柜平板铰链/小角度平板铰链供应商采购指南选哪家 - 行业平台推荐
  • 别让福利沉睡:支付宝红包套装背后的理性消费选择 - 团团收购物卡回收
  • 推荐一下浙江铁氟龙公司,长荣新材料科技服务优排名佳 - 工业品牌热点
  • 2026年河南诚信的花纹钢板,高强度钢板厂家选型推荐名录 - 品牌鉴赏师
  • 基于python的养老院信息管理系统
  • 2025-2026年局装焕新选哪家 装配式公司这样挑更省心 - 匠言榜单
  • 总结广东佛山好用的共挤无缝塑木地板服务商家,选哪家 - 工业设备