AQS 原理初探
学 JUC 时发现 AQS 是很多同步工具的基础记录一下理解。什么是 AQSAQSAbstractQueuedSynchronizer是 Java 并发包的一个基类ReentrantLock、CountDownLatch、Semaphore 都是基于它实现的。核心思想AQS 内部维护了一个 volatile int 状态值表示资源是否被占用0 空闲1 被占一个 CLH 双向队列排队的线程都在里面等着简单理解加锁过程线程 A 来加锁 → state 是 0 → CAS 改成 1 → 拿到锁了 线程 B 来加锁 → state 是 1 → 加到等待队列里 → 阻塞 线程 A 释放锁 → state 改回 0 → 唤醒队列中的线程 BReentrantLock 的可重入同一个线程多次加锁state 会累加比如重入两次 state2释放锁时也对应减减到 0 才真正释放。公平锁 vs 非公平锁公平锁先来后到按队列顺序非公平锁插队上来先 CAS 抢一下没抢到再去排队ReentrantLock 默认是非公平的和 synchronized 一样。总结理解 AQS 对后续学习各种锁和同步器帮助很大。源码虽然复杂但核心就是 CAS 队列。