文章目录
- 1. 概述
- 2. ReentrantLock 原理
什么是AQS
口述:全称是 AbstractQueuedSynchronizer,是一个框架,提供了这种
通用的同步器机制
,它里面也是定义了很多的方法,像获取锁啊释放锁啊,其实释放啊获取啊是基于state属性来做的,state属性呢表示了当前资源的状态,是需要子类去定义和维护这个状态的,控制如何获取锁和释放锁,对state状态的修改也是用到了CAS机制,保证了修改的正确性,其实AQS里面还定义了很多其他的方法,他呢是一个通用的框架,像ReentrantLock、Countdownlatch、信号量啊就是基于AQS实现的。
1. 概述
- 用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁
- getState - 获取 state 状态
- setState - 设置 state 状态
- compareAndSetState -
cas 机制设置 state 状态
- 提供了基于
FIFO 的等待队列
,类似于 Monitor 的 EntryList - 条件变量来实现
等待
、唤醒机制
,支持多个条件变量
,类似于 Monitor 的 WaitSet
AQS 要实现的功能目标:
阻塞
版本获取锁acquire
和非阻塞
的版本尝试获取锁tryAcquire
- 获取锁超时机制
- 通过打断取消机制
- 独占机制及共享机制
- 条件不满足时的等待机制