写点什么

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

  • 2014-04-18
  • 本文字数:1355 字

    阅读完需:约 4 分钟

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接口:异步计算中可能出现的一个阶段,也就是说当一个 CompletionStage 完成时执行的动作或计算。
  3. CompletableFuture类:一个可以确定完成状态的 Future。有关 CompletableFuture 的详细用法可参考 NoBlogDefFound 上的《 Java 8: CompletableFuture in action 》一文。
  4. ConcurrentHashMap.KeySetView<K,V> 类:ConcurrentHashMap 的键的集合视图。
  5. CountedCompleter类:一个在没有其他 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 并发编程方面特性的详细介绍可从官方文档获取。


感谢杨赛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-04-18 01:325941
用户头像

发布了 219 篇内容, 共 148.9 次阅读, 收获喜欢 195 次。

关注

评论

发布
暂无评论
发现更多内容

不仅性能秒杀Hadoop,现在连分布式集群功能也开源了

爱倒腾的程序员

大数据 涛思数据 tdengine 物联网 时序数据库

高教授:区块链软硬件相结合能提升系统性能 也能保持一定的灵活性

CECBC

分布式 行业资讯 区块链技术 落地应用

开源、云、传统IT的三国杀

郭华

云计算 开源 商业 IT

vivo,此去灵台方寸山

脑极体

白鹭引擎助力《梦幻西游网页版》刷新h5游戏新高度

DT极客

阿里最“短命”的P10?入职不到3周,钉钉副总裁张志琦因个人原因离职

程序员生活志

阿里巴巴 互联网热点

架构师训练营第8周作业

Hanson

总结

Kiroro

地方政府争夺数字货币试点,互联网巨头参与测试,央行数字货币即将来临

CECBC

行业资讯 央行数字货币

凭实力蝉联第一!Flink 又双叒叕上榜啦

Apache Flink

flink

第九周.命题作业-GC原理

刘璐

秒杀系统

Z冰红茶

【得物技术】流量之战—性能优化三十六计

得物技术

Java 流量 得物技术部 商品 电商平台

架构师训练营第8周总结

Hanson

设计一个秒杀系统挑战和问题及方案或思路

Young

埋点全解析,你最关心的可视化埋点在这里!(文末附开源地址)

易观大数据

奈学:一起了解几种序列化协议

古月木易

序列化 序列化协议

一文带你掌握OBS的两种常见的鉴权方式

华为云开发者联盟

Rest OBS 鉴权 Header携带签名 URL携带签名

week9作业1

架构师训练营第九章作业

吴吴

零/低代码编程风口已到,请快快上车!

代码制造者

编程语言 低代码 零代码 iVX

最右JS2Flutter框架——通信机制(三)

刘剑

flutter 大前端 探索与实践

加快速度推进区块链融合发展

CECBC

区块链 行业资讯 产业落地

JVM类加载与执行

superman

JVM 类加载

cxuan读者的外包面试之旅

苹果看辽宁体育

Java 面试 程序人生

week9 作业

雪涛公子

数据库实践丨MySQL多表join分析

华为云开发者联盟

MySQL 数据库 华为云 join 多表join

为什么你总觉得自己是对的?

池建强

个人成长

week09 总结

Z冰红茶

垃圾回收&秒杀设计

dony.zhang

垃圾回收

架构师0期Week9作业1

Nan Jiang

Java SE 8 在并发工具方面的加强_Java_小盖_InfoQ精选文章