面试的时候被问到AQS会不会一脸懵逼呢?今天来学习一下AQS吧!
看看这个听起来高大上又难以回答的东西到底是个啥?
1.什么是AQS
JUC包中 的很多同步器如ReentrantLock、Semaphore、CountDownLatch等等都是有一些基础的共同的行为,比如:等待队列、条件队列、独占获取、共享获取等等,这些抽象行为就被封装成一个抽象类,就是AbstractQueuedSynchronizer(抽象队列同步器)。
一般是通过一个内部类Sync继承 AQS
将同步器所有调用都映射到Sync对应的方法
看图,抽象类AbstractQueuedSynchronizer的实现类几乎都是各种我们常见的JUC工具类中的内部类——各种Sync。
AQS具有以下特性:独占/共享,公平/非公平,可重入,阻塞等待队列,允许中断
2.AQS核心结构
1.AQS内部维护属性 volatile int state
state表示资源的可用状态
state的三种访问方式:
getState() setState() compareAndSetState()
2.定义了两种资源访问方式:
Exclusive-独占,只有一个线程能执行,如ReentrantLock
Sh