AQS是java的并发控制器,关于编发的特性,比如:是否公平,是否可冲入,是否共享等特性都是通过AQS来完成。
首先来看看AQS的继承结构:
我们能够看出AQS集成了一个AbstarctOwnableSynchronizer这个类:那这个类给AQS赋予了什么特性呢?
这里的volatile 修饰的state是一个非常关键的字段,可以锁AQS的公平,可重入等的特显都是都是围绕这个字段的数值来实现的:这个字段在不同的工具类中标识不同的含义,例如在ReentrantLock这个工具类中,state就是用来标识当前线程枷锁的次数,也就是这是一个可冲入的锁。
AQS的分析,我会通过俩个工具类来java并发编程中线程对应的独占啊,共享啊,可重入啊这些特性。
首先我们使用ReentrantLock这个工具类来进行分析。先来看看ReentrantLock 这个类的继承结构
我们来看一个使用案例:通过这个案例我们来逐步的分析.
到这里第一个公平和非公平就体现出来,看看公平和非公平是怎么实现的
所以,这里能够看出公平与分公平都复写了父类Sync这个对应的lock方法、需要注意的是这里lock方法标识lock 接口中的方法而是Sync这个内部类定义的一个lock的抽象方法
先来看看公平锁的lock是怎么实现的:
这就是ReentrantLock的加锁的全过程
ReenTrantLock释放锁和唤醒其他节点的过程
网友评论