思维导图

文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
一、什么是AQS
谈到并发编程,不得不说AQS(AbstractQueuedSynchronizer),这可谓是Doug Lea老爷子的大作之一。AQS即是抽象队列同步器,是用来构建Lock锁和同步组件的基础框架,很多我们熟知的锁和同步组件都是基于AQS构建,比如ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore。
实际上AQS是一个抽象类,我们不妨先看一下源码:
1 | public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable { |
由源码可以看出AQS是有以下几个部分组成的:

1.1 state共享变量
AQS中里一个很重要的字段state,表示同步状态,是由volatile修饰的,用于展示当前临界资源的获锁情况。通过getState(),setState(),compareAndSetState()三个方法进行维护。
1 | private volatile int state; |