news 2026/4/28 14:48:11

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

【期货量化AI】期货量化交易策略深度学习应用(Python量化)

一、前言 深度学习在量化交易中的应用越来越广泛。通过深度学习模型,可以捕捉复杂的非线性关系,提高策略的预测能力。本文将介绍如何将深度学习应用于期货量化交易。 本文将介绍: 深度学习在量化交易中的应用LSTM模型应用CNN模型应用注意力…

作者头像 李华
网站建设 2026/4/20 13:37:46

【期货量化进阶】期货量化交易策略高频交易技巧(Python量化)

一、前言 高频交易通过快速执行大量交易获取微小价差收益。虽然对个人投资者来说完全的高频交易较难实现,但学习高频交易技巧可以提高策略执行效率。本文将介绍高频交易的核心技巧。 本文将介绍: 高频交易基本原理订单簿分析微观结构分析执行算法延迟…

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

救命神器 8个降AI率网站深度测评与推荐:专科生必看!

在当前的学术写作环境中,AI生成内容(AIGC)已经成为许多学生不得不面对的现实。无论是论文、报告还是课程作业,如何有效降低AI痕迹、避免查重率过高,成为了专科生们亟需解决的问题。而随着技术的发展,越来越…

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

多模态大模型效率提升:Token压缩技术详解与实战指南

近年来多模态大模型在视觉感知,长视频问答等方面涌现出了强劲的性能,但是这种跨模态融合也带来了巨大的计算成本。高分辨率图像和长视频会产生成千上万个视觉 token ,带来极高的显存占用和延迟,限制了模型的可扩展性和本地部署。 …

作者头像 李华