AQS的概念:
队列同步器 是用来构建锁和其他基础并发组件的框架。内部维护了一个state,维护同步器状态,一个双向队列维护等待线程排队工作。运用了模板方法模式,父类抽取了公共代码和执行逻辑,子类继承复写定制化方法即可。
数据结构:
成员:
Node head; 头节点
Node tail; 尾节点
int state; state=0 表示释放锁 state>0 表示占有锁 操作state的方法: getState setState compareAndSetState主要方法:
void acquire(int arg)
boolean release(int arg)
void acquireInterruptibly(int arg)
boolean doAcquireNanos(int arg, long nanosTimeout)
void acquireShared(int arg)
boolean releaseShared(int arg)
void acquireSharedInterruptibly(int arg)
boolean tryAcquireSharedNanos(int arg, long nanosTimeout)
Node是内部维护的一个CLH队列。CLH 同步队列是一个 FIFO 双向队列,AQS 依赖它来完成同步状态的管理
CLH的数据结构: