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 ...
随机推荐
- Json -- 语法和示例,javascript 解析Json
1. 语法 JSON(JavaScriptObject Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不 ...
- bootstrap框架:常用内容一
<!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="utf-8&q ...
- "Entity Framework数据插入性能追踪"读后总结
园友莱布尼茨写了一篇<Entity Framework数据插入性能追踪>的文章,我感觉不错,至少他提出了问题,写了出来,引起了大家的讨论,这就是一个氛围.读完文章+评论,于是我自己也写了个 ...
- python 超时异常处理
异常处理具体见:[循序渐进学Python]9.异常处理 环境平台:Python2.7.9 + Win8.1 本篇记录一下自己写爬虫的遇到的问题,程序中批量获取图片地址,然后批量保存.由于没有设置网址打 ...
- 用Spring和c3p0工具简单的实现增删改查
1.导入Spring和c3p0的jar包 2.配置beans.xml文件 <?xml version="1.0" encoding="UTF-8"?> ...
- String、StringBuffer、StringBuilder分析(jdk8)
以下代码只挑选了关键方法进行分析 public final class String //String类不可继承,实现了序列化 implements java.io.Serializable, Com ...
- 高性能高并发服务器架构设计探究——以flamigo服务器代码为例
这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序. 所谓高性能就是服务器能流畅地处理各个客户端的连接并尽量低延迟地应答客户端的请求:所谓高并发,指的是服务器可以同时 ...
- 兼容 数组 api map代码
if(!("map" in Array.prototype)) Array.prototype.map=function(fun){ for(var i=0,arr=[]; i&l ...
- [Beego] 内置的模板函数(不同格式的字符串和html的互转)
在使用beego框架的时候,常常需要把不同形式的字符串转化为html,有时候为了安全考虑会将html转义,而有时候希望能显示html标签.在存储到db中后,再取出来的显示是原本的,即html标签不会生 ...
- LAMP环境运行中为PHP添加CURL模块
这里是自己遇到的问题记录并总结 1.—— : LAMP环境所需源码包在 /websrc 下 [保存了WEB环境所需的各种tar.gz 源码包]命名为资源目录 2.—— : LAMP环境源码包统一解压到 ...