AQS 源码解析
AbstractQueuedSynchronizer是Java并发包 java.util.concurrent 的核心基础组件,是实现Lock的基础。 1. AQS类结构 属性 // 属性 private transient volatile Node head;// 同步队列头节点 private transient volatile Node tail;// 同步队列尾节点 private volatileint state;// 当前锁的状态:0代表没有被占用,大于0代表锁已被线程占用(锁可以重入,每次重入都+1) private transient Thread exclusiveOwnerThread; // 继承自AbstractOwnableSynchronizer 持有当前锁的线程 方法 // 锁状态 getState()// 返回同步状态的当前值; setState(int newState)// 设置当前同步状态; compareAndSetState(int expect, int update)// 使用CAS设置当前状态,保证状态设置的原子性; // 独占锁 acquire(int arg)// 独占式获取同步状态,如果获取失败则插入同步队列进行等待; acquireInterruptibly(int arg)// 与acquire(int arg)相同