美文网首页
AQS之 ReentrantLock

AQS之 ReentrantLock

作者: longtaiping | 来源:发表于2020-05-24 10:36 被阅读0次

    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释放锁和唤醒其他节点的过程

    相关文章

      网友评论

          本文标题:AQS之 ReentrantLock

          本文链接:https://www.haomeiwen.com/subject/uwkvrctx.html