The java.util.concurrent Synchronizer Framework笔记
这篇笔记是关于 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笔记的更多相关文章
- 《The java.util.concurrent Synchronizer Framework》 JUC同步器框架(AQS框架)原文翻译
一.论文简介 闲来无事,看看源码,发现了一篇JDK作者的论文<The java.util.concurrent Synchronizer Framework>主要描述了作者对Abstrac ...
- java.util.concurrent包学习笔记(一)Executor框架
类图: 其实从类图我们能发现concurrent包(除去java.util.concurrent.atomic 和 java.util.concurrent.locks)中的内容并没有特别多,大概分为 ...
- Java源码之 java.util.concurrent 学习笔记01
准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.ja ...
- java.util.concurrent包API学习笔记
newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...
- jdk8中java.util.concurrent包分析
并发框架分类 1. Executor相关类 Interfaces. Executor is a simple standardized interface for defining custom th ...
- 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 ...
- 《java.util.concurrent 包源码阅读》 结束语
<java.util.concurrent 包源码阅读>系列文章已经全部写完了.开始的几篇文章是根据自己的读书笔记整理出来的(当时只阅读了部分的源代码),后面的大部分都是一边读源代码,一边 ...
- java.util.concurrent介绍【转】
java.util.concurrent介绍 java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent ...
- 013-并发编程-java.util.concurrent.locks之-AbstractQueuedSynchronizer-用于构建锁和同步容器的框架、独占锁与共享锁的获取与释放
一.概述 AbstractQueuedSynchronizer (简称AQS),位于java.util.concurrent.locks.AbstractQueuedSynchronizer包下, A ...
随机推荐
- hdu 5391 Zball in Tina Town 威尔逊定理 数学
Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...
- 利用Python检验你的策略参数是否过拟合(转)
过拟合现象 一般来说,量化研究员在优化其交易策略参数时难免会面临这样一个问题:优化过后的策略在样本内表现一般来说均会超过其在样本外的表现,即参数过拟合.对于参数优化来说,由于优化时存在噪音,过拟合是不 ...
- go语言的一个简单httpserver
httpserver.go package main import ( "net/http" "flag" "fmt" "log& ...
- PinYin4JUtils
import java.util.Arrays; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin ...
- day5-hashlib模块
一.概述 在程序开发过程中,很多时候会涉及用户信息验证环节,这类场景下我们往往需要对字符串进行加密处理.python中也有专门的加密模块,它就是hashlib.下面章节将详述它的常见用法. 二.常见加 ...
- MySQL 5.7.18 在centos下安装记录
一个朋友找我如何在linux下安装mysql5.7.18,我稍微整理下了下记录,如下: 下载地址: MySQL5.7.18参数官方网址:https://dev.mysql.com/doc/refman ...
- C++友元类实现
C++中的友元既可以实现友元函数,也可以实现友元类,也就是说一个类也可以作为另外一个类的友元.当作为一个类的友元时,它的所有成员函数都是另一个类的友元函数,都可以访问另一个类的私有或者公有成员. 请看 ...
- Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development
Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development If you are consi ...
- C/C++ 笔试题一
摘自 网络上的 笔试题,据说是华为的,考察的内容还算全面,也很细致: 答案 疏略 检查了下,应该没有什么大问题,但是 还是那句话,尽信之不如无,所以还是要自己思考 1.static有什么用途?(请至少 ...
- OSPF 配置
封装在IP层:协议号 89 hello时间是dead时间的1/4 224.0.0.5 .在点到点网络, 比如T1线路,是连接单独的一对路由器的网络, 点到点网络上的有效邻居总是可以形成邻接关系的,在这 ...