AQS 的原理是什么?
发布于
一、定义
AQS(AbstractQueuedSynchronizer)是 JUC 锁的基础框架,用一个 int 状态变量(state)和一个 FIFO 等待队列实现同步。
二、核心
- state:同步状态,0 表示空闲,>0 表示被占用。
- CLH 队列:未获取锁的线程封装成 Node 入队,自旋 + 阻塞等待。
三、两种模式
- 独占模式:同一时刻只有一个线程持有锁,如 ReentrantLock。
- 共享模式:多个线程可同时持有,如 Semaphore、CountDownLatch。
四、获取锁流程
- 尝试 CAS 修改 state。
- 成功 → 获取锁。
- 失败 → 封装 Node 入队,park 阻塞。
- 前驱节点释放锁后 unpark 后继,后继重试。
五、子类实现
子类只需实现 tryAcquire/tryRelease(独占)或 tryAcquireShared/tryReleaseShared(共享),队列管理由 AQS 提供。