AbstractQueuedSynchr

Java并发编程之AQS

随声附和 提交于 2021-01-02 20:51:43
AbstractQueuedSynchronizer是JDK1.5提供的一个基于FIFO等待队列实现,用于实现同步器的基础框架,以下简称AQS。AQS是实现 JCU包中几乎所有的有关锁、多线程并发以及线程同步器等重要组件的基石, 其核心思想是基于volatile int state这样的一个属性同时配合Unsafe工具对其原子性的操作来实现对当前锁的状态进行修改 。 状态管理 AQS使用int来表示状态,同时提供了getState()、setState()、compareAndSetState()方法来获取和修改该值。在互斥锁中它表示着线程是否已经获取了锁,0表示lock不被任何线程占有,1 已获取,大于1 重入数。 private volatile int state; protected final int getState() { return state; } protected final void setState(int newState) { state = newState; } protected final boolean compareAndSetState(int expect, int update) { return unsafe.compareAndSwapInt(this, stateOffset, expect, update); }