`
daojin
  • 浏览: 702282 次
  • 性别: 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,开发者可以构建自己的文件同步解决方案,满足特定业务场景的需求,例如实现自动备份、多服务器之间的数据同步,或是优化现有文件管理系统。无论是个人开发者还是企业,...

    能保存Properties文件注释的Properties工具类

    `CommentedProperties`是基于Java的自定义Properties扩展,它的核心功能在于加载和保存文件时能够识别并保留注释。在标准的Properties类中,`load()`方法会跳过所有非键值对的行,而`store()`方法则只会写入键值对,...

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

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

    本项目是IntelliJ IDEA的插件,能帮助java开发者自动生成javadoc文档注释

    在Java编程中,Javadoc是一种标准的注释方式,用于生成API文档,帮助其他开发者理解代码的功能和用法。本项目是专为IntelliJ IDEA设计的一个插件——Easy Javadoc,其目标是简化Java开发者编写Javadoc的过程,自动...

    java核心技术卷二

    5. 多线程和并发编程,探讨线程安全、锁机制、同步器以及并发工具类。 6. Java的反射机制,了解如何在运行时检查、修改和调用对象的方法和属性。 7. 注解(Annotation)和泛型的深入讲解,涵盖自定义注解的创建与...

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

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

    java数据库表同步

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

    Java核心技术原书第10版中文版.pdf

    5. **多线程编程**:Java内置了对多线程的支持,书中详细阐述了Thread类和Runnable接口,同步机制(如synchronized关键字、wait/notify、Lock接口),以及线程池的使用,帮助开发者理解并发编程的挑战和解决方案。...

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

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

    JAVA核心面试知识整理(283页).pdf

    对于Java开发者来说,深入理解JVM(Java虚拟机)是提升技能的关键。以下是对"JAVA核心面试知识整理(283页).pdf"中提及的部分内容的详细解释: 1. JVM(Java虚拟机) JVM是Java的核心组成部分,它负责解析并执行...

    Java中高级核心知识全面解析.pdf

    Java 中高级核心知识全面解析 ...Java 语言是一种功能强大且广泛应用的编程语言,本文对 Java 中的高级核心知识进行了全面解析,涵盖了基础知识到高级特性,旨在帮助读者更好地理解和掌握 Java 语言。

    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核心技术 卷1,2源代码

    Java核心技术是Java编程领域的经典著作,分为卷I和卷II,涵盖了Java语言和平台的核心概念。这两卷书籍深入探讨了Java编程的各个方面,是初学者和经验丰富的开发者的宝贵资源。源代码通常会帮助读者更好地理解和实践...

    贪吃蛇java源代码带注释

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

    谷歌翻译API,jar包

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

    最新版JAVA核心知识点.pdf

    JAVA核心知识点总结 JAVA是目前最流行的编程语言之一,广泛应用于Web开发、 Android应用开发、企业软件开发等领域。...本文档只是对JAVA核心知识点的总结和剖析,旨在帮助开发者更好地理解JAVA的核心概念和原理。

    JAVA2核心技术卷2

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

Global site tag (gtag.js) - Google Analytics