AQS(AbstractQueuedSynchronizer) 是 Java 并发包(java.util.concurrent.locks
)的核心基础框架,用于构建锁和其他同步器(如 ReentrantLock
、Semaphore
、CountDownLatch
等)。AQS 通过一个 FIFO 队列 和一个 状态变量 来实现线程的阻塞、唤醒和同步。
1. AQS 的核心思想
AQS 的核心思想是:
-
使用一个 volatile 的整型状态变量(state) 来表示同步状态。
-
通过一个 FIFO 队列 来管理等待获取资源的线程。
-
提供模板方法,子类可以通过实现这些方法来定义具体的同步逻辑。
2. AQS 的核心组件
2.1 状态变量(state)
-
state
是一个volatile int
类型的变量,表示同步状态。 -
子类可以通过
getState()
、setState()
和compareAndSetState()
方法来操作state
。 -
state
的具体含义由子类定义。例如:-
在
ReentrantLock
中,state
表示锁的重入次数。 -
在
Semaphore
中,state
表示剩余的许可数量。
-
2.2 同步队列
-
AQS 使用一个 双向链表 来实现同步队列,队列中的每个节点(
Node