什么是AQS?


一、什么是AQS?

AQS也就是AbstractQueuedSynchronizer(抽象队列同步器),放在java.util.concurrent.locks包下。

AQS是一个抽象类,大概定义如下:

public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements Serializable {
    
} 

它是很多同步器的基础框架,比如ReentrantLockCountDownLoatchSemaphore等。

二、AQS实现原理

在AQS内部,维护了:

  • state变量:用volatile int修饰,当state大于0的时候说明对象锁已经被占有了,state的修改动作是通过CAS来完成的
  • 工作队列:FIFO队列,用来实现线程的排队工作,当线程加锁失败时,该线程会封装成一个Node节点放在队列尾部
  • Node节点:存放了int waitStatusNode prevNode nextThread thread

文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录