Java7 java.util.concurrent 并发包计划
JAVA 计划 util concurrent 发包
2023-09-14 08:56:51 时间
Java7发布版本的具体计划应该开始了,之前经常有人问我们关于JSR166的后续计划包含哪些内容。下面是目前暂定的内容,欢迎提出你们的见
解和意见。
1.Phasers
一个通用的内存屏障实现。
2.LinkedTransferQueue (and TransferQueue interface)
一个具有非阻塞,阻塞和同步接口的队列。
3. ConcurrentReferenceHashMap
并发Hash Map,其键和值可以是弱引用或者软引用。
4. Fences (in java.util.concurrent.atomic)
底层的内存屏障实现
5. ForkJoin framework.
(具体见下面)
这些功能的初始版本可以在很多地方看到。Phasers 和 LinkedTransferQueues在JSR166y中,
链接地址 http://gee.cs.oswego.edu/dl/concurrency-interest/index.html。
Fences API 的说明可以在这个地址查看到,http://gee.cs.oswego.edu/dl/jsr166/dist/docs/java/util/concurrent/atomic/Fences.html。
说明文档还需要再做一些修改,同时Fences API也需要Java虚拟机的支持。(目前任何Java虚拟机上实现的Fences API都有效率问题,在Fences API能高效执行之前是没有多大用处的) 加入这个Fences API也是为了更好的与即将到来的C++0x APIs相对应。
Jason Greene基于ConcurrentHashMap编写了ConcurrentReferenceHashMap。我想最新的版本应该是在这里
http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbosscache/experimental/jsr166/src/jsr166y/ConcurrentReferenceHashMap.java?view=markup
我们推迟集成ConcurrentHashMap,因为需要等待GC支持Ephemerons(一个弱引用键-值链的方案)。虽然此举可以推动其它部门,但我不认为Ephemeron能很快得到支持,所以我们需要考虑在GC不支持Ephemerons情况下完成ConcurrentHashMap。
大多数人都知道目前的ForkJoin 框架有两部分组成,基本ForkJoin{Pool,Task}框架,以及基于这个基本框架的并行集合(目前只有ParallelArray)。我考虑只把基本框架集成进JDK,把并行集合部分作为非JDK的包继续开发。这样做可以避免暴露接口(IntAndLongToInt 等96个接口)和表达式问题(闭包等),而且要把这些加入JDK也需要艰难的讨论。推迟加入可以有更多的时间来激励开发和使用并发集合的包,同时也可以有时间让IDE,语言扩展和另外的JVM语言来支持。
同时我已经开始审阅把ForkJoin和Executor集成起来。ForkJoinPool会实现Executor的服务,ForkJoinTask会实现Future。(使之成为可能的主要思想是让控制阻塞和创建备用线程之间保持并发)。这可以更好的满足在Fortress and X10使用(这两种语言编译后会运行在JVM上)。但它也开始构建人们想要但却未曾开始着手干的基础设施,比如创建一系列循环(非 ForkJoin类型),每个循环有时候会创建ForkJoin任务。
我会等待你们对这些内容的意见和建议,之后再把这些内容到恰当的地方。(恰当的地方的意思是,我会把这内容整合进JSR66y, 然后加入 java.util.concurrent 包中).
JUC:java.util.concurrent理解与使用示例 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。
java.util.concurrent解析——ThreadPoolExecutor源码解析 任何一种语言、框架,线程都是非常重要的一部分。要想实现异步就需要通过异步线程,但是频繁地创建销毁线程会带来较大的性能开销,而线程池就是为解决这一问题而出现的
ali清英 方腾飞,花名清英,英文名kiral,并发编程网创始人,支付宝技术专家,《Java并发编程的艺术》作者。
更多细节将继续(获得内部并行维护行之有效会慢),但只增加简单的基础框架到java.util.concurrent: 类 ForkJoinPool (类ForkJoinWorkerThread 仍会为高级使用者和性能调优者保留)和 抽象类ForkJoinTask,以及三个子类RecursiveAction,RecursiveTask, AsyncForkJoinAction(最新一次修订后是为了用来在不提供类的情况下,构建诸如BinaryAsyncAction的类)。
我会等待你们对这些内容的意见和建议,之后再把这些内容到恰当的地方。(恰当的地方的意思是,我会把这内容整合进JSR66y, 然后加入 java.util.concurrent 包中).
JUC:java.util.concurrent理解与使用示例 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。
java.util.concurrent解析——ThreadPoolExecutor源码解析 任何一种语言、框架,线程都是非常重要的一部分。要想实现异步就需要通过异步线程,但是频繁地创建销毁线程会带来较大的性能开销,而线程池就是为解决这一问题而出现的
ali清英 方腾飞,花名清英,英文名kiral,并发编程网创始人,支付宝技术专家,《Java并发编程的艺术》作者。
相关文章
- Java内存模型FAQ(四)重排序意味着什么?
- 解决 Mac 的 Terminal 中,Java 乱码的问题
- [转]java 计算两个时间差得出:时分秒
- Java实现 LeetCode 692 前K个高频单词(map的应用)
- Java实现 LeetCode 234 回文链表
- Java实现 LeetCode 226 翻转二叉树
- Java实现 蓝桥杯 历届试题 翻硬币
- java实现矩形区域的交和并
- java实现Kruskal算法
- Java实现 蓝桥杯VIP 算法训练 斜率计算
- 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)
- java unicode转码为中文 实例
- 【JAVA】java中的length和length()
- 【JAVA】 01-Java基础知识
- java.lang.OutOfMemoryError: Java heap space 解决方法
- 【JAVA】MacBook安装Java环境及eclipse
- macos:安装java 17.0.6(android studio报错:Unable to locate a Java Runtime.)
- 在Java中可以使用自定义的java.net.InetAddress实现来解决虚拟hosts的问题
- 在线EXCEL绝配:SpreadJS 16.0.3 + GcExcel Java 6.0.3
- How to improve Java's I/O performance( 提升 java i/o 性能)
- Java 关于java.util.LinkedHashMap cannot be cast to 实体类问题答案
- 基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - grid [跨浏览器远程测试-可分布式]
- JAVA学习第一课(初识JAVA)
- Java经典23种设计模式之结构型模式(一)
- Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释
- java - 详解 Java 17 中新推出的密封类
- 【java】Java 接口(Interface)
- 【java】Java 集合框架