`
daojin
  • 浏览: 700285 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java同步核心类AbstractQueuedSynchronizer的官方注释翻译理解

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

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

此类支持默认排他模式和共享模式之一或两者。当以独占方式进行获取时,其他线程尝试进行的获取将无法成功。由多个线程获取的共享模式可能(但不一定)成功。该类不“理解”这些区别,只是从机械意义上说,当共享模式获取成功时,下一个等待线程(如果存在)还必须确定它是否也可以获取。在不同模式下等待的线程共享相同的FIFO队列。通常,实现子类仅支持这些模式之一,但例如可以在ReadWriteLock中发挥作用。仅支持互斥模式或仅支持共享模式的子类无需定义支持未使用模式的方法。

此类定义了一个嵌套的ConditionObject类,可以由支持独占模式的子类用作Condition实现,该子类的独占模式isHeldExclusively报告是否相对于当前线程独占同步,使用当前getState值调用的方法release完全释放该对象,并在给定此保存状态值的情况下进行获取,最终将该对象恢复为其先前获取的状态。否则,没有AbstractQueuedSynchronizer方法会创建这样的条件,因此,如果不能满足此约束,请不要使用它。 ConditionObject的行为当然取决于其同步器实现的语义。

此类提供了内部队列的检查,检测和监视方法,以及条件对象的类似方法。可以根据需要使用AbstractQueuedSynchronizer将它们导出到类中以实现其同步机制。

此类的序列化仅存储基础原子整数维护状态,因此反序列化的对象具有空线程队列。需要可序列化的典型子类将定义一个readObject方法,该方法可在反序列化时将其恢复为已知的初始状态。

用法
要将此类用作同步器的基础,请通过使用getState,setState和/或compareAndSetState检查和/或修改同步状态来重新定义以下方法(如适用):

尝试获取
tryRelease
tryAcquireShared
tryReleaseShared
isHeldExclusive
默认情况下,这些方法中的每一个都会引发UnsupportedOperationException。这些方法的实现必须在内部是线程安全的,并且通常应简短且不阻塞。定义这些方法是使用此类的唯一受支持的方法。所有其他方法都被声明为最终方法,因为它们不能独立变化。
您可能还会发现从AbstractOwnableSynchronizer继承的方法对于跟踪拥有独占同步器的线程很有用。鼓励您使用它们-这将启用监视和诊断工具,以帮助用户确定哪些线程持有锁。

即使此类基于内部FIFO队列,它也不会自动执行FIFO获取策略。独占同步的核心采取以下形式:

 获得:
     while(!tryAcquire(arg)){
        如果线程尚未排队,则将其加入队列;
        可能阻塞当前线程;
     }

 发布:
     如果(tryRelease(arg))
        取消阻塞第一个排队的线程;
 
(共享模式相似,但可能涉及级联信号。)
因为获取队列中的获取检查是在排队之前被调用的,所以新获取线程可能会在其他被阻塞和排队的线程之前进行插入。但是,您可以根据需要定义tryAcquire和/或tryAcquireShared以通过内部调用一种或多种检查方法来禁用插入,从而提供公平的FIFO获取顺序。特别是,如果hasQueuedPredecessors(一种专门设计用于公平同步器的方法)重新启动,则大多数公平同步器都可以定义tryAcquire返回false。
分享到:
评论

相关推荐

    Java文件同步开源项目Sync

    通过深入理解和使用Java文件同步开源项目Sync,开发者可以构建自己的文件同步解决方案,满足特定业务场景的需求,例如实现自动备份、多服务器之间的数据同步,或是优化现有文件管理系统。无论是个人开发者还是企业,...

    易语言源码注释翻译助手源码

    本压缩包包含的“易语言源码注释翻译助手源码”是一个实用工具,旨在帮助开发者更好地理解和翻译易语言编写的程序中的注释。该工具通过调用外部API,即百度翻译API,实现了自动翻译功能,从而减轻了程序员在处理多...

    java初学者完整代码+注释16

    8. **面向对象编程**:深入理解类的构造器、继承、抽象类、接口,以及多态性,这些都是Java OOP的基础。 9. **包和访问修饰符**:了解如何组织和管理类,以及public、private、protected和默认访问权限的区别,有助...

    java数据库表同步

    在Java编程领域,数据库表同步是一项关键任务,特别是在分布式系统或者需要实时数据更新的应用中。这个主题涵盖了如何使用Java来实现实时或定时地将一个数据库的表内容更新到另一个数据库,确保数据的一致性和完整性...

    Java并发系列之AbstractQueuedSynchronizer源码分析(独占模式)

    AbstractQueuedSynchronizer(AQS)是Java并发编程中一个重要的工具,它是Java并发包`java.util.concurrent.locks`中的核心抽象类,用于构建锁和同步器的基础框架。AQS主要依赖于一个FIFO(先进先出)的双端队列来...

    java初学者完整代码+注释10

    通过阅读和理解注释,你可以加深对Java语法和编程实践的理解。 总之,“java初学者完整代码+注释10”涵盖了Java编程的基础概念,通过实际的代码示例和详尽的注释,为初学者提供了宝贵的实践机会。继续按照这样的...

    Java核心技术 卷1 基础知识 原书第10版

    《Java核心技术 卷1 基础知识》是Java编程领域的经典著作,原书第10版更是汇集了多年来Java语言发展的精华。本书主要涵盖了Java编程的基础知识,为读者提供了全面而深入的理解Java编程环境的必备知识。 首先,Java...

    JAVA 扫雷1.2 源代码 详细注释

    【JAVA 扫雷1.2 源代码 详细注释】是一款基于JAVA语言开发的扫雷游戏,它不仅提供了一种娱乐方式,更是一个学习JAVA编程和理解游戏逻辑的好教材。开发者在编写代码的过程中,充分考虑了初学者的需求,为每一部分关键...

    ajava注释说明

    接下来,我们将聚焦于Java注释这一核心主题,展开详尽的知识点解析。 ### Java注释的基本概念 Java注释是程序员用来在代码中添加说明性文字的一种方式,它不会被编译器执行,主要用于提高代码的可读性和维护性。...

    贪吃蛇java源代码带注释

    贪吃蛇是一款经典的电子游戏,它...总结,通过分析和学习"贪吃蛇java源代码带注释",你可以深入理解Java编程语言,掌握面向对象设计原则,并熟悉游戏开发的基本流程。同时,这也将提高你的逻辑思维能力和问题解决技巧。

    JAVA2核心技术(中文PDF).rar

    这份"JAVA2核心技术(中文PDF).rar"文档很可能是对这些核心概念的详细阐述,旨在帮助Java开发者深入理解平台的工作原理和最佳实践。 Java是一种广泛使用的面向对象的编程语言,其设计目标是具有跨平台性、安全性...

    谷歌翻译API,jar包

    在jar包中,主要包括两个核心类:一个用于定义支持的语言,另一个则是执行翻译操作的类。语言类通常会列举出谷歌翻译支持的所有语言代码,如"zh-CN"代表简体中文,"en"代表英文等。执行翻译的类则包含了向谷歌翻译...

    JAVA2核心技术卷2

    在多线程方面,书籍详细介绍了如何创建和管理线程,包括线程同步、互斥、死锁问题的预防和解决,以及如何利用Java的并发工具类如`ExecutorService`、`Future`、`Callable`和`CyclicBarrier`等来高效地执行并发任务。...

    Java核心技术PDF自用版

    理解和掌握线程同步、互斥锁、死锁、并发工具类等是编写高效并发程序的关键。 10. **集合框架**:Java集合框架包括List、Set、Queue等接口和ArrayList、HashSet、LinkedList等实现类,以及Map接口和HashMap、...

    史上最全的Java核心技术总结.pdf

    Java是一种面向对象的编程语言,它的核心技术包括Java虚拟机(JVM)、Java核心技术、Java并发编程、计算机网络等。以下是Java核心技术的总结: 一、Java虚拟机(JVM) Java虚拟机(JVM)是Java Runtime ...

    java核心知识

    本资料包"03_CoreJava"专注于Java的核心部分,通过代码实例和可运行的案例帮助学习者深入理解并应用这些知识。 首先,Java核心语法包括基本数据类型、变量、运算符、流程控制(如if语句、switch语句、for循环、...

    java核心技术卷1第九版高清中文版

    标题《java核心技术卷1第九版高清中文版》指的是这本图书是关于Java编程语言的基础核心知识介绍,是Java技术领域中的经典教材。本书的第九版是最新版,其中文版的发布意味着它已被翻译成中文,这极大地方便了中国...

    基于Java核心的DataX Clickhouse同步插件设计源码

    人人车团队开发的这款基于Java核心的DataX Clickhouse同步插件,其源码总计包含682个文件,涵盖了多种类型的文件,包括Java源文件、配置文件、资源文件等。其中Java源文件数量最多,占了整个项目的核心,体现了插件...

    corejava JAVA核心编程 里的源代码

    9. **多线程**:Java提供了Thread类和Runnable接口来实现并发,理解线程同步机制(如synchronized关键字、wait()、notify()方法)和并发工具类(如Semaphore、CountDownLatch)。 10. **网络编程**:Socket编程是...

    《精通JAVA核心技术》及源代码

    《精通JAVA核心技术》是一本深度探讨Java编程语言的著作,旨在帮助读者全面理解并掌握Java的核心概念和技术。这本书涵盖了从基础语法到高级特性的广泛内容,对于任何希望深入学习Java的开发者来说,都是一个宝贵的...

Global site tag (gtag.js) - Google Analytics