美文网首页
AQS源码浅析(1)——类注释概述

AQS源码浅析(1)——类注释概述

作者: 墨_0b54 | 来源:发表于2022-04-02 20:13 被阅读0次

概览

图1.png

类注释

AQS是一个框架,用于实现依赖先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件等)。
此类旨在成为大多数依赖单个原子int值来表示状态的同步器的基础,子类必须定义更改此状态的受保护方法,并定义该状态在获取或释放此对象方面的含义。
鉴于这些,此类中的其他方法执行所有排队和阻塞机制。 子类可以维护其他状态字段,但只有使用方法getState 、 setState和compareAndSetState操作的原子更新的int值才会被同步跟踪。

我的理解:AQS内部维持了线程等待队列,通过一个int值来表示同步器的状态,这个状态值的意义由子类自己维护。

子类应定义为非公共内部帮助类,用于实现其封闭类的同步属性。 AbstractQueuedSynchronizer类不实现任何同步接口。 相反,它定义了诸如acquireInterruptibly方法,这些方法可以由具体锁和相关同步器酌情调用以实现它们的公共方法。

我的理解:使用方法就是由非公有内部类继承此类,然后由我们自己决定怎样提供自己的同步器公共方法。

此类支持默认独占模式和共享模式中的一种或两种。 当以独占模式获取时,其他线程尝试获取不会成功。
多个线程获取的共享模式可能(但不一定)成功。 这个类不“理解”这些差异,除了机械意义上的区别,当共享模式获取成功时,下一个等待线程(如果存在)也必须确定它是否也可以获取。 在不同模式下等待的线程共享同一个 FIFO 队列。
通常,实现子类仅支持这些模式中的一种,但两种模式都可以发挥作用,例如在ReadWriteLock 。 仅支持独占或仅共享模式的子类不需要定义支持未使用模式的方法。

我的理解:此类支持独占模式和共享模式,但是默认是独占模式,并且所有线程共享同一个队列。

该类定义了一个嵌套的AbstractQueuedSynchronizer.ConditionObject类,该类可以被支持独占模式的子类用作Condition实现,其中方法isHeldExclusively报告是否针对当前线程独占同步,使用当前getState值调用的方法release完全释放此对象,并acquire ,给定这个保存的状态值,最终将此对象恢复到其先前获取的状态。 没有AbstractQueuedSynchronizer方法否则会创建这样的条件,因此如果无法满足此约束,请不要使用它。AbstractQueuedSynchronizer.ConditionObject的行为当然取决于其同步器实现的语义。
此类为内部队列提供检查、检测和监视方法,以及为条件对象提供类似方法。 这些可以根据需要使用AbstractQueuedSynchronizer的同步机制导出到类中。
此类的序列化仅存储底层原子整数维护状态,因此反序列化的对象具有空线程队列。 需要可序列化的典型子类将定义一个readObject方法,该方法在反序列化时将其恢复到已知的初始状态。

我的理解:如图一所示的ConditionObject内部类实现了Condition接口,这个类为支持独占模式的子类所使用。这个类提供了检查、检测和监视方法。这个类的序列化只存储状态值。

相关文章

  • AQS源码浅析(1)——类注释概述

    概览 类注释 AQS是一个框架,用于实现依赖先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件等)。此...

  • AbstractQueuedSynchronizer

    AQS简介 什么是AQS(抽象队列同步器) 详细的可以看源码中的类注释 acquire方法执行逻辑(独占锁的获取)...

  • AQS源码注释

  • 多线程基础(十八):ReentrantReadWriteLock

    [toc] 1.类结构及注释 1.1 类结构 ReentrantReadWriteLock是基于AQS实现的可重入...

  • java多线程

    java多线程 线程类源码解读(2)-线程状态及常用方法 线程类源码解读(3)-线程中断 逐行分析AQS源码(1)...

  • AQS源码浅析

    简述 记录下自己的学习过程 抽象方法(模板模式) 子类需要按照自己的需求,去重写一些抽象方法; tryAcquir...

  • AQS源码浅析

    AQS基本结构 阻塞队列是从head后的结点开始的,也即 不包含头节点head 哨兵结点head作用 因为AQS本...

  • 靠别人不如靠自己(3)——ConcurrentHashMap源码

    1. ConcurrentHashMap 1.1. 概述 在ConcurrentHashMap的源码注释中,说明了...

  • 2021-04-11_AQS锁互斥源码学习笔记总结

    20210411_AQS锁互斥源码学习笔记总结 1概述 AQS是一个用来构建锁和同步器的框架,Lock包中的锁(R...

  • 技术点

    1Java集合主要是hashmap实现原理2.多线程问AQS源码、并发工具类源码、锁的实现原理、阻塞队列源码、线程...

网友评论

      本文标题:AQS源码浅析(1)——类注释概述

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