这篇笔记是关于 Doug Lea 的 The java.util.concurrent Synchronizer Framework

原文地址:http://gee.cs.oswego.edu/dl/papers/aqs.pdf。


1. JDK 1.5 引入 java.util.concurrent package(JSR 166)。

这个 package 包含了一些中级的并发支持类。

在这些类中有一个同步器(synchronizers)集合。这些同步器都维护了:

(1)一个内部的同步状态(synchronization state),用于表示一个锁是否已经上锁了;

(2)一些用于更新或检查这个同步状态的方法;

(3)至少有一个方法用于阻塞调用线程,在允许的条件下重新运行这个调用线程。

一些例子有:各种形式的互斥锁,读写锁,信号量,barrier,fututures, event indicators, handoff queues。

2. 基本上任一同步器都可以去实现其他同步器。

但这样做会带来额外的复杂度、开销和死板。另外,概念上讲也不吸引人。

JSR 166 建立了一个框架,以 AbstractQueuedSynchronizer 为核心,提供了一些通用的机制供大部分同步器使用。

3. 同步器拥有两类方法:acquire、release。

acquire: 阻塞调用线程直到同步状态允许它运行。

release:改变同步状态,唤醒一个或多个阻塞线程。

4. java.util.concurrent 包没有定义统一的同步器API。

不同的类中 acquire 和 release 有不同的名字和形式。

比如:Lock.lock, Semaphore.acquire, CountDownLatch.await, FutureTask.get 都对应于 acquire。

但是维护了一致的规约用于支持一系列通用的使用选项。

每个同步器都支持(有意义的情况下):

(1) 非阻塞同步(tryLock);

(2) 超时;

(3) 可中断;

5. 定义了一个Condition,支持monitor-style await/signal操作。

需要和Lock类一起使用。

6. 性能目标

Java内置锁(monitor lock)的性能一直是个关注点。

主要考虑优化空间和时间开销(这篇paper考虑的是JDK1.5; JDK1.6发布后,synchronized和ReentrantLock性能基本持平,参见周志明的《深入理解Java虚拟机》第二版,p392-p393。所以提倡在未来的JDK版本中,优先考虑使用synchronized来实现同步)。

java.util.concurrent优化的首要目标是scalability:在同步器竞争下可预期的维持效率。

The java.util.concurrent Synchronizer Framework笔记的更多相关文章

  1. 《The java.util.concurrent Synchronizer Framework》 JUC同步器框架(AQS框架)原文翻译

    一.论文简介 闲来无事,看看源码,发现了一篇JDK作者的论文<The java.util.concurrent Synchronizer Framework>主要描述了作者对Abstrac ...

  2. java.util.concurrent包学习笔记(一)Executor框架

    类图: 其实从类图我们能发现concurrent包(除去java.util.concurrent.atomic 和 java.util.concurrent.locks)中的内容并没有特别多,大概分为 ...

  3. Java源码之 java.util.concurrent 学习笔记01

    准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.ja ...

  4. java.util.concurrent包API学习笔记

    newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...

  5. jdk8中java.util.concurrent包分析

    并发框架分类 1. Executor相关类 Interfaces. Executor is a simple standardized interface for defining custom th ...

  6. Java Concurrency - java.util.concurrent API Class Diagram

    摘自: www.uml-diagrams.org Here we provide several UML class diagrams for the Java™ 7 java.util.concur ...

  7. 《java.util.concurrent 包源码阅读》 结束语

    <java.util.concurrent 包源码阅读>系列文章已经全部写完了.开始的几篇文章是根据自己的读书笔记整理出来的(当时只阅读了部分的源代码),后面的大部分都是一边读源代码,一边 ...

  8. java.util.concurrent介绍【转】

    java.util.concurrent介绍   java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent ...

  9. 013-并发编程-java.util.concurrent.locks之-AbstractQueuedSynchronizer-用于构建锁和同步容器的框架、独占锁与共享锁的获取与释放

    一.概述 AbstractQueuedSynchronizer (简称AQS),位于java.util.concurrent.locks.AbstractQueuedSynchronizer包下, A ...

随机推荐

  1. JumpGame,JumpGame2

    JumpGame:给定一个非负整数数组,开始在第一个位置,每个位置上的数字代表最大可以跳跃的步数,判断能不能跳到最后一个位置. 例如:A=[2,3,1,1,4],在位置0处,可以跳一步到位置1,位置1 ...

  2. bzoj 2190: [SDOI2008]仪仗队 线性欧拉函数

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 作为 ...

  3. Origin软件作图留白过多问题解决

    解决空白过大方法:1.Tools——>Options2.Page——>Copy page setting——>Margin默认是Page,下拉菜单选Border,Clip Borde ...

  4. BusyIndicator using MVVM 忙碌状态指示器的的实现

    ViewModel 视图模型 public abstract class ViewModelBase : INotifyPropertyChanged { private bool isbusy; p ...

  5. 分享知识-快乐自己:FastDFS详解

    在使用fdfs之前,需要对其有一定的了解,这篇文章作为准备篇,将针对fdfs的简介,功能性,使用场景等方面进行介绍 一):起源 淘宝网开放平台技术部资深架构师余庆先生首先回顾了自己在Yahoo工作时的 ...

  6. swagger 文件上传

    单个文件上传的写法: @RequestParam MultipartFile pictures 多个文件上传的写法: @RequestParam String token,@RequestPart(& ...

  7. 019对象——对象 method_exists property_exists instanceof

    <?php /** * 19 对象 method_exists property_exists instanceof */ //method_exists() 判断方法是否存在,第一个参数对象或 ...

  8. 再论typedef

    typedef 定义(或者叫重命名)类型而不是变量 1.类型是一个数据模板,变量是一个实在的数据.类型是不占内存的,而变量是占内存的. 2.面向对象的语言中:类型的类class,变量就是对象. #in ...

  9. SpringBoot_09_使用jar包中配置的Bean(starter配置)

    一.前言 二.配置方式 在 META-INF/spring.factories 中声明主配置类,并开启bean的扫描 三.参考资料 1.Understanding auto-configured be ...

  10. ubuntu下搭建hadoop平台

    终于把单击模式跟伪分布式模式搭建起来了,记录于此. 1.SSH无密码验证配置 因为伪分布模式下DataNode和NameNode均是本身,所以必须配置SSH localhost的无密码验证. 第一步, ...