AQS队列锁原理解析

AQS锁

AQS是基于队列来实现锁的分配的;它的全称是:AbstractQueuedSynchronizer(抽象队列式同步器)

AQS是一个用来构建锁和其他同步组件的基础框架

核心思想

如果被请求的共享资源空闲(即没有被锁定的状态),则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用(即锁定状态),那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制就是AQS;AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。

AQS是将每一条请求共享资源的线程封装成一个CLH队列锁的一个结点,来实现锁的分配。

所以首先我们需要去了解CLH队列锁

AQS是CLH锁的变种升级

下面我们直接看AQS在Java中的应用AbstractQueuedSynchronizer(抽象队列式同步器)

常见的应用

JDK中几种常见使用了AQS的同步组件:

AbstractQueuedSynchronizer

常见用法

ReentrantLock重入锁 Semaphore信号灯 CountDownLatch计数器