理解为什么需要AQS,如何使用AQS,至少要做什么,再进一步结合JDK源代码中的实践,理解AQS的原理与应用
AQS是AbstactQueuedSynchronizer的简称,它是一个Java提高的底层同步工具类,用一个int类型的变量 --state 表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。AQS的主要作用是为Java中的并发同步组件提供统一的底层支持,用法是通过继承AQS实现其模版方法,然后将子类作为同步组件的内部类。比如ReentrantLock里面的子类Sync:
public class ReentrantLock implements Lock, java.io.Serializable { private static final long serialVersionUID = 7373984872572414699L; private final Sync sync; abstract static class Sync extends AbstractQueuedSynchronizer { ... } } 复制代码
private volatile int state; 复制代码
//内部类Node static final class Node 复制代码
//基于CAS的基础操作方法 private final boolean compareAndSetHead(Node update) private final boolean compareAndSetTail(Node expect, Node update) private static final boolean compareAndSetWaitStatus(Node node,int expect,int update) private static final boolean compareAndSetNext(Node node, Node expect, Node update) //实现的acquire/release方法等等 public final void acquire(int arg) public final boolean release(int arg) ······ 复制代码