7.1J.U.C之AQS介绍
并发容器里的同步器AbstractQueuedSynchronizer - AQS
jdk 1.5 新增了JUC,而AQS被公认为是JUC的核心,AQS提供了一个FIFO的队列,可以用于构建锁和其他同步装置的基础框架
AQS底层使用双向链表,可以理解为队列,主要包括以下队列
Sync queue 同步队列,数据结构为双向链表
Condition queue 条件队列,数据结构为单向链表 ,非必须,只有程序中要使用到Condition的时候才会存在,并且可能存在多个Condition Queue
AQS的设计
使用Node实现FIFO队列,可以用于构建锁或者其他同步装置的基础框架
利用int类型来表示状态,在AQS类中,有一个status的成员变量,基于AQS有一个同步组件ReentrantLock,该组件中status表示获取锁的线程数,假如status=0表示还没有线程获取锁,status=1表示已有线程获取锁,status>1表示重入锁的数量
使用方法是继承,
子类通过继承并通过实现它的方法管理其状态{acquire和release}的方法操作状态
可以实现排它锁和共享锁模式
基于AQS的子类-常用的同步子类
CountDownLatch
Semaphore
CyclicBarrier
ReentrantLock
Condition
FutureTask
注意:上面我们只列出了常见的AQS的子类,一些不怎么常用的AQS组件并未列出
Last updated
Was this helpful?