HoRain云--揭秘AQS:ReentrantLock高效锁机制 📅 发布时间:2026/7/7 7:43:33 👁️ 浏览次数: HoRain 云小助手个人主页⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。目录⛳️ 推荐 加锁流程详解 解锁与传递⚖️ 关键机制与设计思想 总结与实践AbstractQueuedSynchronizerAQS是Java并发包中构建锁和同步器的核心框架。理解它最好的方式就是通过一个具体的锁实现来看其运作机制。下面这个表格清晰地展示了ReentrantLock与AQS的协作关系帮你快速抓住核心。组件/角色在ReentrantLock中的体现核心职责AQS (AbstractQueuedSynchronizer)内部类Sync继承自 AQS提供同步状态管理、线程阻塞队列CLH变体 和线程阻塞/唤醒的底层框架。State (同步状态)AQS 中的volatile int state字段对ReentrantLock而言state0表示锁空闲state0表示锁被占用且数值代表锁的重入次数。独占模式 (Exclusive)ReentrantLock是独占锁同一时间只能有一个线程获取锁。尝试获取/释放锁 (TryAcquire/Release)由Sync的子类 (NonfairSync,FairSync) 实现定义公平/非公平策略下如何具体地获取和释放锁。线程排队队列 (CLH Queue)AQS 内部维护的 FIFO 双向链表head,tail存放获取锁失败的线程形成一个等待队列确保锁分配的公平性。 加锁流程详解当你调用lock.lock()时其内部流程清晰地展示了AQS如何运作。首次争抢非公平锁为例线程A首先会直接尝试利用CAS操作将state从0改为1。如果成功表示它立刻抢到了锁并将独占线程设置为自身。这种“插队”行为是非公平锁的典型特征旨在减少线程切换的开销提升性能。争抢失败进入队列如果线程A已持有锁此时线程B来争抢CAS操作会失败。随后会调用AQS的acquire(1)方法。这个方法是一个模板方法其核心逻辑是tryAcquire再次尝试获取锁。对于非公平锁它仍然会直接尝试CAS抢锁。对于公平锁它会先检查等待队列中是否有前辈hasQueuedPredecessors()如果没有才会尝试CAS。这即是公平与非公平的核心区别。addWaiter如果tryAcquire失败线程B会被包装成一个Node节点然后以线程安全CAS 的方式加入到等待队列的尾部。acquireQueued入队后的线程B会进入一个自旋循环。在这个循环中它会检查自己是否是队列中的第二个节点即头节点的后继节点。如果是它会再次尝试tryAcquire。如果不是或者尝试失败它就会阻塞自己通过LockSupport.park()等待被唤醒。处理可重入如果线程A已经持有锁再次调用lock()这就是可重入。此时tryAcquire会检查当前线程是否是独占线程如果是则将state简单地加1。因此state的值就代表了该线程重入锁的次数。 解锁与传递解锁过程lock.unlock()则相对直接展示了锁如何安全地在线程间传递。释放锁线程A调用unlock()会触发tryRelease方法。该方法会将state减1。只有当state被减为0时才表示锁被完全释放即重入次数已清零。唤醒后继如果锁被完全释放AQS会找到等待队列的头节点它是一个空节点或已取消的节点然后唤醒其后的第一个有效等待节点即线程B。后继线程获取锁线程B被唤醒后会从之前acquireQueued中的阻塞点继续执行再次尝试tryAcquire。此时锁已被释放线程B成功获取锁并将自己设置为新的头节点从而出队。⚖️ 关键机制与设计思想公平 vs. 非公平根本区别在于新来的线程是否会检查并尊重等待队列。非公平锁允许“插队”吞吐量通常更高公平锁则严格遵循FIFO避免了“饥饿”现象。CAS与线程安全无论是修改state还是向队列添加节点AQS都大量使用CAS操作来保证并发环境下的线程安全这是实现无锁化竞争的基础。线程阻塞与唤醒AQS使用LockSupport.park()和unpark()来阻塞和唤醒线程这是比Object.wait()/notify()更底层、更灵活的原语。 总结与实践AQS通过一个状态state 和一个FIFO队列构建了一个强大且灵活的同步器框架。ReentrantLock只是其一个经典应用。基于AQS你还可以实现信号量Semaphore、栅栏CountDownLatch等复杂的同步工具。简单来说AQS就像是一个高度定制化的“排队管理器”它定义好了排队的规则、休息区的管理以及何时叫下一个号的流程而具体的“服务窗口”如ReentrantLock则只需决定什么样的顾客线程可以被立刻服务获取锁。希望这个结合ReentrantLock的解析能帮助你透彻地理解AQS的工作原理如果你对AQS的共享模式如Semaphore或Condition条件队列感兴趣我们可以继续深入探讨。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧
HoRain云--2026最佳Markdown预览方案 🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 … 2026/7/4 16:45:55
该模型采用id=0的控制策略,控制器采用电流滞环控制。 基本思想是将电流给定信号 与检测得到的... 该模型采用id0的控制策略,控制器采用电流滞环控制。 基本思想是将电流给定信号 与检测得到的实际输出电流比较,若实际电流值大于给定值,则通过改变逆变器的的开关状态,反之增大 电流滞环控制在逆变器控制领域是个挺有意思的活&am… 2026/7/4 23:59:14
收藏备用|大模型知识蒸馏入门详解(小白/程序员必看,附经典文献+行业趋势) 对于刚入门大模型、想落地轻量模型的程序员和小白来说,知识蒸馏是绕不开的核心技术——它的核心目标,就是把大型复杂模型(业内统称“教师模型”)里沉淀的知识、推理逻辑和决策能力,高效迁移到参数更少、运行速度更快、… 2026/5/17 3:37:38
DLSS Swapper 终极指南:轻松管理游戏DLSS版本,提升画面性能 DLSS Swapper 终极指南:轻松管理游戏DLSS版本,提升画面性能 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper 是一款专为游戏玩家设计的强大工具,让您能够轻松下载、管理… 2026/7/7 11:04:58
小白程序员也能学会的大模型应用开发,开启高薪新机遇! 随着AI技术迅猛发展,传统CRUD开发工程师岗位面临淘汰风险。掌握AI应用开发技能,特别是大模型应用开发,已成为时代刚需。市场要求开发者熟练掌握微调、Agent、RAG等核心技术。大模型应用开发工程师人才稀缺,薪资待遇优厚。本文介绍… 2026/7/7 11:04:58
ERP系统中的物料管理问题 今年初,我们团队去一家上了国外ERP系统的大型制造厂调研,了解到该厂目前出现的客户投诉的问题,主要是客户投诉下订单后到货期太长,有的甚至投诉延迟了半年才交货;还有就是到了合同定的交货日期交货时有漏货的现象&… 2026/7/7 11:02:57
2026无菌灌装产线升级,产量规格如何突破瓶颈? 当旺季来临,生产线却成了“卡脖子”的难关对于液态饮品生产企业而言,每逢销售旺季,最令人焦虑的往往不是市场订单,而是自己那条老旧的灌装产线。数据显示,国内超过60%的中型饮料企业仍在使用传统热灌装或湿法灌装设备&… 2026/7/7 11:02:57
YOLO 指标深度解析:3 个案例看懂 mAP 与 F1-score 的矛盾与取舍 YOLO 指标深度解析:3 个案例看懂 mAP 与 F1-score 的矛盾与取舍在计算机视觉领域,目标检测模型的评估指标往往让开发者陷入两难境地。当 mAP0.5 表现优异但 F1-score 却持续低迷时,我们该如何抉择?本文将带您深入剖析这一现象背后… 2026/7/7 10:58:56
数字孪生灌区技术架构解析:从“感知”到“预演”的四层闭环 山东德州潘庄灌区,今年春灌首次启用数字孪生系统,测流效率提升50%、误差控制在3%以内。这套系统背后,是一套从传感器到三维孪生体的完整技术栈。本文从架构视角拆解数字孪生灌区的技术实现。 一、技术痛点:灌区管理的老三样 传统灌… 2026/7/7 10:58:56
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践 1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8… 2026/7/7 0:01:11
如何3步搞定加密视频下载:跨平台资源嗅探与解密工具终极指南 如何3步搞定加密视频下载:跨平台资源嗅探与解密工具终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是… 2026/7/7 0:03:13
Jailhouse-gui可视化管理工具:让多核处理器分区变得简单高效 Jailhouse-gui可视化管理工具:让多核处理器分区变得简单高效 【免费下载链接】Jailhouse-gui A graphical user interface (GUI) tool for configuring and managing Jailhouse, a Linux-based hypervisor for partitioning multicore processors into isolated cel… 2026/7/7 0:03:13
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/6 8:43:22
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/6 7:29:49
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/6 7:29:51