简单了解AQS

65 阅读1分钟

一、什么是AQS

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

  • tryAcquire
  • tryRelease
  • tryAcquireShared
  • tryReleaseShared
  • isHeldExclusively