`
daojin
  • 浏览: 678104 次
  • 性别: 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 7 核心技术与最佳实践》PDF版本下载.txt

    《深入理解Java 7 核心技术与最佳实践》PDF版本下载

    Java 并发核心编程

    这篇指南主要是为帮助java多线程开发人员理解并发的核心概念以及如何应用这些理念。本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2SE5中新增的概念,如锁(Lock)、原子性(Atomics)、并发...

    Java后端核心知识总结700页

    Java后端核心知识总结:JVM篇 Java后端核心知识总结:并发编程篇 Java后端核心知识总结:MySQL篇 Java后端核心知识总结:Redis Java后端核心知识总结:RabbitMQ Java后端核心知识总结:Kafak Java后端核心知识总结:...

    Java核心源代码

    Java源代码,包含了所有以java开头的包

    Core Java.JAVA核心技术(中文版)

    Core Java.JAVA核心技术(中文版) Core Java.JAVA核心技术(中文版)

    JAVA核心卷JAVA核心卷JAVA核心卷

    JAVA核心卷JAVA核心卷JAVA核心卷

    java核心技术源码

    CayS.Horstmann等编著,公飞编译的《Java核心技术》(CoreJava)自第1版出版以来,一直备受广大Java程序设计人员的青睐,畅销不衰,是Java经典书籍,该书囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量...

    Java核心技术 第12版 开发基础+高级特性 英文原版

    着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体包括面向对象程序设计、反射与代理、接口与内部类、异常处理、泛型程序设计、集合框架、事件监听器模型、图形用户界面设计和并发...

    JAVA核心卷JAVA核心卷JAVA核心卷part3

    JAVA核心卷JAVA核心卷JAVA核心卷part3

    java 核心编程 java

    《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了部分内容,以便适应Java的最新特性。本版也不例外,它反映了Java SE 6的新特性...

    Java_并发核心编程-中文翻译_英文原版开源项目JNA-中文翻译版

    Java_并发核心编程-中文翻译_英文原版开源项目JNA-中文翻译版

    Java核心技术+基础知识+面试汇总大全 完整PDF版

    这是一套Java核心技术基础使用手册,包含Java 基础核心总结、Java核心基础、Java核心知识、Java 基础面试题总结等,内含最强 Java 核心知识点整理及思维导图,需要的朋友可下载试试! Java是一门编程语言,Java发展...

    JAVA2核心技术第7版卷2高级特性-中文版

    《Java2核心技术卷2:高级特性》是Java 2技术权威指南,全面覆盖Java 2技术的高级主题,包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、Javaean、Java安全模式、XML、...

    JAVA框架核心技术笔记

    JAVA框架核心技术笔记,JAVA框架核心技术笔记,JAVA框架核心技术笔记,JAVA框架核心技术笔记,JAVA框架核心技术笔记,JAVA框架核心技术笔记,JAVA框架核心技术笔记,JAVA框架核心技术笔记,JAVA框架核心技术笔记,JAVA框架...

    Java核心编程技术源码

    Java高级特性:反射、泛型、注释符、自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入。随书附赠光盘内容为《Java高手真经(编程基础卷):Java核心编程技术》各种原型包、系统源程序。《Java高手...

    Java核心编程Java 课件ppt

    Java 课件ppt,从最基础的开始适合刚刚接触java的同学们看看。

    java核心程序,详细注释

    这是我自己的代码,有详细的注释,希望对你们有用

    Java2核心技术

    Java2核心技术开发文档,类加载器、字节码教研、代码前面、加密、用户认证、语音设计特色。

Global site tag (gtag.js) - Google Analytics