并发编程 AQS
本文将介绍 JUC 中的 AQS。
一、什么是 AQS ?
AQS,AbstractQueuedSynchronizer,是一个用于构建锁和同步器的框架。
二、核心思想
如果被请求的资源空闲,则将当前线程设置为有效的工作线程,并将被请求的资源设为锁定状态;否则,将线程加入到等待队列中,等待唤醒。
其中,
被请求的资源的状态通过一个 int 类型的成员变量表示
1
2
3
4/**
* The synchronization state.
*/
private volatile int state;等待队列是一个内置的双向链表;当锁被释放后,等待队列中的线程将被按顺序唤醒
三、使用方式
AQS 的使用方式设计基于模板方法模式,在 AQS 中定义了若干模板方式,并编写了对模板方法的调用逻辑,子类需要继承并实现模板方法。
自定义同步器时需要重写以下几个模板方法:
1 |
|
参考
- Java 并发编程实战