一、什么是AQS
AQS的全称是AbstractQueuedSynchronizer,它是一个抽象类。同时是阻塞式锁和相关的同步器工具的框架。是其他juc包下各种锁实现的基类。因为juc并发包下很多API都是基于AQS来实现的加锁和释放锁等功能的,AQS是java并发包的基础类。AQS运用了模版方法模式,其定义了state 属性来表示资源的状态,一般是state=0表示资源空闲可以加锁,而state!=0表示资源已经被锁定,此时子类可以有不同的实现,如果是可重入锁就判断持有资源的是否是自己线程,如果是不可重入就直接挂起。子类一般实现如下方法
- tryAcquire
- tryRelease
- tryAcquireShared
- tryReleaseShared
- isHeldExclusively