>本文讲解AQS框架如何支撑ReentrantLock。AQS提供状态管理和线程排队的核心机制,而ReentrantLock则定义了状态(重入次数)的具体含义和获取/释放锁的业务逻辑,两者协作实现了高效的同步。 以 为例来讲解 AQS 的设计原理是最好的方式,因为它完美地展示了 AQS 是如何被“使用”的。 本身不包含复杂的同步逻辑,它的核心功能完全委托给了其内部的一个帮助类——,而 类正是继承自 。 有两种模式:公平锁()和非公平锁(),它们都是 的子类。 我们来一步步拆解 是如何利用 AQS 的三大核心组件(State、FIFO 队列、独占模式)来实现自己的功能的。 1. ReentrantLock 如何定义 "State" 在 中,AQS 的 变量被用来表示锁的重入次数。 :表示锁当前未被任何线程持有(unlocked状态)。 :表示锁已被某个线程持有(locked状态)。 的值就是该线程获取锁的次数。 但是,仅有 还不够! AQS 只知道状态值,但不知道这个锁是被哪个线程持有的。因此, 的 类自己额外增加了一个成员变量: 所以, 的完整状态由两部分组成: 1. (来自 A...