AQS,全称AbstractQuenedSynchronizer,能够了解为形象的队列同步器。
一、AQS的核心思想
AQS核心思想是,如果被申请的共享资源闲暇,则将以后申请资源的线程设置为无效的工作线程,并且将共享资源设置为锁定状态。如果被申请的共享资源被占用,那么就须要一套线程阻塞期待以及被唤醒时锁调配的机制,这个机制AQS是用CLH队列锁实现的,行将临时获取不到锁的线程退出到队列中。
二、实现原理

1、private volatile int state:AQS应用一个int成员变量来示意同步状态,通过内置的FIFO队列来实现获取资源线程的排队工作。AQS应用CAS对该同步状态进行原子操作实现对其值的批改。

 //获取状态    protected final int getState() {        return state;  } //设置状态值  protected final void setState(int newState) {      state = newState;  } //通过CAS批改状态  protected final boolean compareAndSetState(int expect, int update) {        // See below for intrinsics setup to support this      return unsafe.compareAndSwapInt(this, stateOffset, expect, update);  }

在ReentrantLock中,stste示意获取锁的线程数,如果state=0,示意还没有线程获取锁,1示意有线程获取了锁。大于1示意重入锁的数量。

2、CLH(Craig,Landin,and Hagersten)队列是一个虚构的双向队列(虚构的双向队列即不存在队列实例,仅存在结点之间的关联关系)。AQS是将每条申请共享资源的线程封装成一个CLH锁队列的一个结点(Node)来实现锁的调配。
三、ReentrantLock中的偏心锁与非偏心锁
 偏心锁:以后线程在抢锁之前先看看队列中是否有排队的线程,如果有则不容许抢,间接退出队列。

非偏心锁:以后线程在抢锁之前不须要查看队列中是否有排队的线程。
利用待补充