Skip to content

AQS(AbstractQueuedSynchronizer),抽象队列同步器。它是Java并发编程中一个最核心、最基础的理论框架。
AQS 为构建锁和同步器(如 Semaphore、CountDownLatch 等)提供了一个底层的“模板”或“骨架”。ReentrantLock、Semaphore、CountDownLatch 等,其内部实现都基于AQS。

一、AQS底层原理

AQS管理着一个核心状态:一个 volatile 修饰的整型变量 state,以及一个 FIFO(先进先出)的线程等待队列。

  • 1、状态 (state):这个 state 的具体含义由子类(即各种锁和同步器)来决定。例如:
    • 在 ReentrantLock 中,state 表示锁被重入的次数(0表示未锁定,1表示被一个线程锁定,>1表示被同一个线程重入)。
    • 在 Semaphore 中,state 表示剩余的许可证数量。
    • 在 CountDownLatch 中,state 表示计数器剩余的值。
  • 2、等待队列:这是一个双向链表构成的队列,用于存放所有等待获取资源而阻塞的线程。当线程尝试获取 state 失败时,它会被构造成一个节点(Node)并加入到这个队列中排队等待。

Released under the MIT License.