并发包之锁

作者: 破晓追风 | 来源:发表于2016-08-25 14:42 被阅读21次

    并发包锁结构

    lock包结构

    Lock

    Lock是一个接口,定义了锁获取和释放的基本操作。

    lock-api

    AbstractQueuedSynchronizer

    队列同步器,是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。
    同步器是实现锁的关键,在锁的实现中聚和同步器,利用同步器实现锁的语义。锁是面向使用者的,它定义了使用者与锁交互的接口,隐藏了实现细节;同步器面向的是锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。

    同步状态 等待队列

    队列同步器方法

    • 同步器同步状态访问和修改的方法
    同步状态
    • 同步器可重写的方法
    可重写方法
    • 同步器模板方法
    模版方法

    同步队列

    节点数据结构

    node数据结构

    节点是构成同步队列(等待队列)的基础,同步器拥有首节点和尾节点,没有成功获取同步状态的线程将会成为节点加入到该队列的尾部。

    • 独占式同步状态获取
    独占获取

    主要完成同步状态获取、节点构造、加入同步队列、在同步队列自旋。

    • 独占式同步状态释放
    独占释放

    整个过程总结:在获取同步状态时,同步器维护一个同步队列,获取状态失败的线程都会被加入到队列中并在队列中进行自旋;移出队列(停止自旋)的条件是前驱节点为头节点且成功获取了同步状态。在释放同步状态时,同步器调用tryRelease方法释放同步状态,然后唤醒头节点的后继节点。

    ReentrantLock

    • 可重入
    • 公平不公平

    参考

    《Java 并发编程的艺术》

    相关文章

      网友评论

        本文标题:并发包之锁

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