1. AbstractQueuedSynchronizer之AQS
理解锁和同步器:
是什么:是整个JUC框架的基础,主要解决锁分配给谁的问题。抽象的队列同步器。
java.util.concurrent.AbstractQueuedSynchronizer
(ReentrantLock | CountDownLatch | ReentrantReadWriteLock | Semaphore) 底层都是AQS
实现:加锁会有阻塞,有阻塞就要排队,有排队就要有队列。因此通过FIFO队列和state状态位来实现锁的分配和同步线程管理。
AQS使用一个Volitile的int类型的成员变量来表示同步状态,通过内置的FIFO队列来完成资源获取的排队工作,将每条要去抢占资源的线程封装成一个Node节点来实现锁的分配,通过CAS完成对State值的修改。
2. AQS内部体系架构
AQS内部架构图:
详解AQS内部代码:
AQS同步队列的基本结构:
3. AQS源码