美文网首页
(十九)AQS实现原理(具体例子待总结)

(十九)AQS实现原理(具体例子待总结)

作者: hedgehog1112 | 来源:发表于2020-11-04 15:09 被阅读0次

    AbstractQueuedSynchronizer,提供FIFO队列,构建锁或者其他同步组件(信号量、事件等、ReentrantLock、CountDownLatch)的基础框架类。

    抽象类继承方式使用,没实现任何同步接口,仅定义同步状态获取及释放方法提供自定义同步组件。

    概要:aqs两种功能、内部实现、添加/del节点

    一、AQS的两种功能

    独占锁:每次只能一个线程持有锁,ReentrantLock独占方式实现互斥锁

    共享锁:允许多个线程同时获取锁,并发访问共享资源,如ReentrantReadWriteLock

    二、AQS内部实现

    FIFO双向队列,双向链表两个指针,指向后继和前驱节点。如当前线程竞争锁失败,AQS把当前线程以及等待状态信息构造成一个Node加到同步队列(由线程封装),同时再阻塞该线程。获取锁线程释放锁后,会从队列中唤醒一个阻塞的节点(线程)。

    三、释放锁 及 添加线程 对于队列变化

    1、添加节点两个变化

    1)新线程封装成Node节点追加到同步队列中,设置prev节点以及修改当前节点的前置节点的next节点指向自己

    2)通过CAS将tail重新指向新的尾部节点

    2、释放锁移除节点

    head节点表示获锁成功节点,头结点释放同步状态时,唤醒后继节点,获锁成功把自己设置为头结点。两个变化

        1)修改head节点指向下一个获得锁的节点

        2)新获得锁节点,将prev的指针指向null

    小变化:设置head节点不需用CAS,原因是设置head节点是由获得锁线程来完成,同步锁只能由一个线程获得,不需要CAS保证

    具体例子待总结
    https://segmentfault.com/a/1190000017372067

    相关文章

      网友评论

          本文标题:(十九)AQS实现原理(具体例子待总结)

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