前言
AbstractQueuedSynchronizer(简称 AQS)是 Java 并发包(`java.util.concurrent`)的基石。`ReentrantLock`、`Semaphore`、`CountDownLatch`、`ReentrantReadWriteLock`、`ThreadPoolExecutor` 的 Worker——这些你每天都在用的并发工具,内部都有一个 AQS 子类在默默工作。
Doug Lea 在设计 JUC 时做了一个关键决策:将"同步"这个横切关注点抽象为一个框架,具体同步器只需要实现自己独特的"获取-释放"语义,而线程排队、阻塞、唤醒这些脏活累活全交给 AQS。
一、AQS 的设计思想
1.1 为什么需要 AQS
在没有 AQS 的年代,每实现一个同步器,你都需要自己处理:
- 线程的排队与出队(通常用链表)
- 线程的阻塞与唤醒(`Object.wait/notify` 或 `LockSupport.park/unpark`)
- 条件等待(类似 `Object.wait/notify` 的 Condition)
&nb