美文网首页
对于AQS的理解

对于AQS的理解

作者: 倚仗听江 | 来源:发表于2020-09-07 09:25 被阅读0次

    AQS,即AbstractQueuedSynchronizer, 抽象队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架。


    AQS内部维护的变量.png

    AQS内部有一个核心变量state,代表加锁的状态,被volatile关键字修饰,保证了线程间的可见性,默认情况下为0。还有一个核心变量是用来记录当前加锁的是哪一个线程,初始状态下,这个变量为null。

    线程1跑过来调用ReetrantLock的lock方法进行加锁,这个加锁的过程,就是用CAS操作将state值从0变成1。如果之前没有人加过锁,那么state肯定为0,加锁就可以成功。加锁成功之后就会设置当前加锁线程是自己。


    AQS加锁过程.png

    ReetrantLock是一个可重入锁,每一次线程1可重入加锁一次,会判断一下当前加锁线程就是自己,那么他自己就可以可重入多次加锁,每次加锁就是把state变量累加1。

    若此时线程2跑过来尝试加锁,会发生以下情况:
    线程2加锁失败(CAS操作),会把自己放入一个等待队列,等待线程1释放锁,线程1会唤醒线程2,再重新尝试加锁。


    AQS实现原理.png

    相关文章

      网友评论

          本文标题:对于AQS的理解

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