写点什么

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:325636
用户头像

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

关注

评论

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

iPaaS丨API低代码平台适用的业务场景

RestCloud

API 低代码平台 ipaas

百度智能云计算系列产品通过电子标准院算力服务成熟度增强级评估

Baidu AICLOUD

四旋翼无人机到底是如何平稳飞行的?巧用空气动力学仿真

Altair RapidMiner

人工智能 无人机 仿真 altair 设计仿真

机器人测试自动化智能化交流沙龙 —— 免费参与,线上线下同步进行,探索未来科技新篇章!

测吧(北京)科技有限公司

测试

如何通过观测云实现AIOps突破?

观测云

AIOPS 智能运维

直播拍卖平台开发:如何利用沉浸式体验展示高价值商品

软件开发-梦幻运营部

【AI 冰封挑战】搭档函数计算,“冰”封你的夏日记忆

阿里巴巴云原生

阿里云 Serverless 云原生

如何解决跨国视频会议卡顿问题

Ogcloud

网络加速 海外网络加速 网络加速服务 视频会议加速

通过 API 集成优化货币兑换

幂简集成

API 货币兑换API

解锁RFG空投:撸毛党看过来,轻松获利的机会来了!

石头财经

MySQL主从同步如何保证数据一致性?

王磊

Java

豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!

我再BUG界嘎嘎乱杀

Python 编程 数据分析 后端 pandas

云上集成时序数据库 IoTDB,海量储能数据实现高效处理与实时分析

Apache IoTDB

为什么要使用TikTok云手机

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版 tiktok运营

编程“奥斯卡”落幕,百度之星决赛中学生疯狂收割大奖!

herosunly

利用多Lora节省大模型部署成本|得物技术

得物技术

LoRa 大模型 企业号2024年8月PK榜

真去送了外卖的程序员,来聊聊他眼中的《逆行人生》丨编码人声

声网

讯飞星火极速超拟人交互技术:语音端到端,8 月底开放;昆仑万维发布 AI 短剧平台 SkyReels丨RTE 开发者日报

声网

机器人测试自动化智能化交流沙龙 —— 免费参与,线上线下同步进行,探索未来科技新篇章!

霍格沃兹测试开发学社

一段鸿蒙旅程

草原上的奔跑

鸿蒙Next 纯血鸿蒙

如何在 KubeBlocks 中配置实例模板?

小猿姐

数据库 Kubernetes 云原生

深入浅出python的lambda表达式

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言 Lambda表达式

Bonree ONE 3.0:全域可观测 运维新境界

博睿数据

第64期 | GPTSecurity周报

云起无垠

RFG引领Meme新趋势——为何现在仍是投资好时机?

股市老人

草图大师2023软件分享:SketchUp Pro 2023(Win&Mac) 中文特别版

你的猪会飞吗

SketchUp Pro 2023 草图大师2023下载 SketchUp Pro 2023下载 mac破解软件下载

通义灵码代码搜索功能的前沿性研究论文被软件工程国际顶会 FSE 录用

阿里云云效

阿里云 云原生 通义灵码

AI作文导师、一键搜索答疑、1秒生成手抄报,百度搜索推出开学季AI大礼包

Geek_2d6073

华为云构建边缘云平台,畅享AI数字时代新体验

最新动态

在孩子成长路上,爱与智慧的陪伴是送给孩子最好的礼物

心大陆多智能体

AI大模型 心理健康 数字心理

使用对比!SLS 数据加工 SPL 与旧版 DSL 场景对照

阿里巴巴云原生

阿里云 云原生 sls

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