AQS:全称是AbstractQueuedSynchronizer
,一个并发同步管理框架类,是 JUC 的灵魂抽象类。如果要自己去实现一个同步管理框架呢?
个人学习寒食君大佬的解析后觉得可以分为三点:
- 通用性,下层实现透明的同步机制,同时给上层提供业务代码编写的功能
- 利用 CAS 操作,原子的修改共享标志位(由这个标志位来判断共享资源是否空闲)
- 等待队列(埋伏笔:情况①:当共享资源被占用时,直接返回结果、情况②:当共享资源被占用时,让后续的线程进入到等待队列中等待)
与 AQS 的结构有着异曲同工之妙,下面就记录下 AQS 的要素吧(本文只写了独占式的过程,共享式也大差不差)。
AQS 的成员变量属性
这里的state
(注意使用了 volatitle
关键字修饰)为什么不是布尔类型而是整数类型呢?因为这就牵扯到了 AQS 的两种模式 --> 共享模式、独占模式
- 独占模式:当共享资源被一个线程占用时,其他线程无法占用
- 共享模式:当共享资源被一个线程占用时,其他共享模式下的线程能占用
state
为了表示占有资源的线程数量,所以采用的是整数类型。
队列里的节