Java SE 8 在并发工具方面的加强

本文首发于InfoQ

Java 8在Lambda表达式、接口默认方式、新的日期API等方面引入的新特性广受关注,同时在并发编程方面也做出了大量改进。以往的几个Java版本都对java.util.concurrent做了不同程度的增强,比如Java 7的Fork/Join框架,而Java 8则进一步在java.util.concurrent下增加了新的接口、类与方法。目前java.util.concurrent的官方文档已经更新,变更部分总结如下:

新的类以及接口

java.util.concurrent 中增加了两个接口四个类:

  1. CompletableFuture.AsynchronousCompletionTask接口:标识在async方法中执行的异步任务。
  2. CompletionStage<T>接口:异步计算中可能出现的一个阶段,也就是说当一个CompletionStage 完成时执行的动作或计算。
  3. CompletableFuture<T>类:一个可以确定完成状态的Future。有关CompletableFuture的详细用法可参考NoBlogDefFound上的《Java 8: CompletableFuture in action》一文。
  4. ConcurrentHashMap.KeySetView<K,V>类:ConcurrentHashMap 的键的集合视图。
  5. CountedCompleter<T>类:一个在没有其他action等待的情况下,会执行一个完成action的 ForkJoinTask 。
  6. CompletionException类:异常类。

ConcurrentHashMap增加新方法

在Java 8中,集合框架基于streams和Lambda表达式做了全新调整:

ConcurrentHashMap增加了30多个方法,包括foreach系列(forEach,forEachKey, forEachValue, forEachEntry)、search系列(search, searchKeys, searchValues, searchEntries)、reduce系列(reduce, reduceToDouble, reduceToLong)以及mappingCount 、newKeySet等方法, 增强后的ConcurrentHashMap更适合做缓存了, 读者可以看看这篇用ConcurrentHashMap类和lambda表达式实现本地缓存的文章。

java.util.concurrent.atomic包的改进

java.util.concurrent.atomic包中增加了四个新的类:DoubleAccumulator、DoubleAdder、LongAccumulator、 LongAdder,这四个类的作者是并发大师Doug lea。

原有的Atomic系列类通过CAS来保证并发时操作的原子性,但是高并发也就意味着CAS的失败次数会增多,失败次数的增多会引起更多线程的重试,最后导致AtomicLong的效率降低。新的四个类通过减少并发,将单一value的更新压力分担到多个value中去,降低单个value的“热度”以提高高并发情况下的吞吐量,京东的刘锟洋详细分析了LongAdder的源代码,另外minddotout的博主在早些时候对LongAdder、AtomicLong进行了性能测试,我们从结果中也可以直观的看到 LongAdder的强大。

ForkJoinPool中增加新方法

Java 8除了对Fork-Join框架做了优化外,也为ForkJoinPool增加了两个静态方法:getCommonPoolParallelism() 、commonPool(),Oleg Shelajev在这篇博文中对Fork/Join做了详细的介绍并做了测试以比较其在JDK7、JDK8中的性能。

增加StampedLock类

StampedLock是一种新型锁的实现,很可能在大多数场景都可以替代ReentrantReadWriteLock。它为读写操作提供了三种模式:Writing、ReadingOptimistic、 Reading。

有关Java 8并发编程方面特性的详细介绍可从官方文档获取。

文章转自 并发编程网-ifeve.com

时间: 2024-10-01 05:59:22

Java SE 8 在并发工具方面的加强的相关文章

health4j—Java项目的全面体检工具

最近利用业余时间写了一个Java代码静态分析工具的聚合器.集成了三种主流的静态分析工具:pmd,checkstyle,findbugs.可以用这三种工具提供的几千种规则集,来给你的项目进行全面体检,同时附带了归纳整理并提供邮件通知.代码开源在github上,取名为health4j. 开发这个工具的初衷是希望它能约束自己代码的规范性.同时,引导自己采用一些已被业界认可的"最佳实践",保证至少自己的代码更加"health".写它的另一个目的,是继续我的个人爱好--&qu

Java 编程要点之并发(Concurrency)详解

本文详细介绍了 Java 并发(Concurrency)的基础用法和原理. 计算机用户想当然地认为他们的系统在一个时间可以做多件事.他们认为,他们可以工作在一个字处理器,而其他应用程序在下载文件,管理打印队列和音频流.即使是单一的应用程序通常也是被期望在一个时间来做多件事.例如,音频流应用程序必须同时读取数字音频,解压,管理播放,并更新显示.即使字处理器应该随时准备响应键盘和鼠标事件,不管多么繁忙,它总是能格式化文本或更新显示.可以做这样的事情的软件称为并发软件(concurrent softw

用Java SE 6.0实现高质量桌面集成开发

提要:本文将以具体的实例向你展示Java SE 6在桌面开发中所提供的一系列优秀特征. 一. 引言 随着Java SE 6 Beta的发行,Java开发者再也不需要自己去实现Java本机接口(JNI)便可以在其应用程序中加入桌面产品所具有的特征.这些桌面集成特征现在已成为内核的一个组成部分. 最新的Java标准版本6.0(代码名为Mustang)将在功能上进行一系列的改进--开发者们能够方便地用Java处理安全,JMX,操作系统文件,国际化和桌面开发等一系列问题.Sun在开发这个版本的过程中表现

Java SE 6在Solaris的可观察性特征分析

Java平台标准版(Java SE)6,代码名为"Mustang",是最新的Java SE发行版本(正在开发中).Java SE 6源码和二进制代码都可以在www.Java.net上下载.Java SE 6平台要到2006年秋天才能正式发布.不过,现在你可以下载试用Java SE 6 Beta版. Java SE 6平台中提供了多种可观察性(observability)工具,这其中的许多工具都可在系统中运行,而这些工具中的只有极少数被用于挂起进程或核心复制处理.因此,在本文中,我们将分

Java SE 6 新特性: HTTP 增强

2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Mustang 在性能方面有了不错的提升.与 Tiger 在 API 库方面的大幅度加强相比,虽然 Mustang 在 API 库方面的新特性显得不太多,但是也提供了许多实用和方便的功能:在脚本,WebService,XML,编译器 API,数据库,JMX,网络和 Instrumentation 方面都有不错

Java SE 6 update 10 Beta简介

不要被这个普普通通的名字所迷惑,即将发布的 Java SE6 update10(当前发布的是试用版)与之前 的更新版本存在很大的差异.与之前发布的 java 编程语言更新相比,Java SE 6u10 加入了更多的特性 和功能,从而推动包络(Envelope)的发展. 严格地说,"Java更新发行版"只是对版本号的第四位(比如,对版本 1.6.0_10 的 10 )进行了改 动.与大多数发行版不同,更新发行版本不允许添加.删除或者更改任何公共 API 函数,这样也将更新 发行局限于对

使用Eclipse和Java SE 6创建独立Web Services应用程序,第2部分

使用Eclipse和Java SE 6创建独立Web Services应用程序,第2部分: Web服务客户端应用程序 开始之前 关于本系列 此系列教程演示如何使用 Java SE 6 创建可轻松地从命令行而不是从 Web 应 用程序服务器容器中运行的独立 Web 服务服务端和客户端应用程序.在简单的 Hello World 示例中,您将利用 Eclipse IDE.Java SE 6 和 Apache Ant 轻松 创建完全可以正常工作的 Web 服务服务端和客户端应用程序.您还将使用 TCP/

使用Eclipse和Java SE 6创建独立Web Services应用程序,第1部分

使用Eclipse和Java SE 6创建独立Web Services应用程序,第1部分: Web Services服务端应用程序 开始之前 关于本系列 此系列教程演示如何使用 Java SE 6 创建可轻松地从命令行而不是从 Web 应 用程序服务器容器中运行的独立 Web Services 服务端和客户端应用程序.使用 简单的 Hello World 示例,您将利用 Eclipse IDE.Java SE 6 和 Apache Ant 轻松创建完全可以正常工作的 Web Services 服

Java SE 6性能白皮书

1 简介 Java SE 6(Java Platform Standard Edition 6)的一个主要设计原则就是以性能缺陷为目标,通过当前最流行的一些 Java 基准测试以及与 Java 社区的紧密协作来确定对性能影响最大的增强关键领域,从而提高性能和可伸缩性. 本指南将概述 Java Standard Edition 6 中新增功能和可伸缩性改进,同时提供各种行业标准和内部开发的基准测试结果,以便演示这些性能改进的影响. 2 新增功能和性能增强 Java SE 6 引入了一些新的功能和性