专栏首页精讲JAVAJava 8 和 Java 9 中并发工具的改变

Java 8 和 Java 9 中并发工具的改变

来源:鸟窝, colobu.com/2018/03/12/Concurrency-Utilities-Enhancements-in-Java-8-Java-9/ 转自:ImportNew

Java 8 和 Java 9中 concurrent 包有了一些改变, 本文对这些改变做了汇总。

Java 8 中 Concurrent package的改变

java.util.concurrent中新的类和接口

增加了两个新接口和4个新类:

  • 接口 CompletableFuture.AsynchronousCompletionTask
  • 接口 CompletionStage
  • 类 CompletableFuture
  • 类 ConcurrentHashMap.KeySetView
  • 类 CountedCompleter
  • 类 CompletionException

java.util.concurrent.ConcurrentHashMap的新方法

集合框架 在Java 8中做了修订,基于 stream 和 lambda表达式 添加了很多聚合方法。因此 ConcurrentHashMap 也引入了30几个新方法,包括各种 foreach 方法(forEach , forEachKey , forEachValue , 和 forEachEntry )、搜索方法( search , searchKeys , searchValues , 和 searchEntries )和reduction方法( reduce ,reduceToDouble , reduceToLong 等)。

也添加了一些其它方法,比如 mappingCount 和 newKeySet 。并且当前版本的 ConcurrentHashMap 的更适合做cache,因为增加了当键值不存在的时候的检查方法。

java.util.concurrent.atomic中的新类

为了并发计算count、sum, 新引入了 DoubleAccumulator , DoubleAdder , LongAccumulator , LongAdder 类,比Atomic提供更高的吞吐率。

java.util.concurrent.ForkJoinPool的新方法

静态的 commonPool() 新加入,可以为ForkJoinTask提供通用池。

两个方法 getCommonPoolParallelism() 和 commonPool() 提供不同的配置。

新类 java.util.concurrent.locks.StampedLock

新类 StampedLock 提供三种模式(写,读,乐观读),用来提高性能。

Java 9 中 Concurrent package的改变

主要是 JEP 266: More Concurrency Updates , 包括publish-subscribe, CompletableFuture 接口的加强等。

  • 支持Reactive Streams publish-subscribe框架,四个接口 Processor 、 Publisher 、 Subscriber 、 Subscription ,容器类 java.util.concurrent.Flow 、java.util.concurrent.SubmissionPublisher
  • CompletableFuture类加强,支持delays, timeout, subclassing 以及其它方法
  • 调优以及修改javadoc

参考文档

  • Concurrency Utilities Enhancements in Java SE 8 https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.html
  • Java 9′s other new enhancements, Part 6: Concurrency https://www.javaworld.com/article/3198904/learn-java/java-9s-other-new-enhancements-part-6-concurrency.html
  • The Essential Java 9 Feature You Probably Never Heard Of https://blog.takipi.com/the-essential-java-9-feature-you-probably-never-heard-of/
  • Java 9′s other new enhancements https://www.infoworld.com/article/3169289/java/java-9s-other-new-enhancements-part-2.html
  • JEP 266: More Concurrency Updates http://openjdk.java.net/jeps/266
  • Java 9 series: Concurrency Updates https://www.voxxed.com/2016/10/java-9-series-concurrency-updates/

Java 8 和 Java 9中 concurrent 包有了一些改变, 本文对这些改变做了汇总。

本文分享自微信公众号 - 精讲JAVA(toooooooozi),作者:鸟窝

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 8 和 Java 9 中并发工具的改变

    Java 8 和 Java 9中 concurrent 包有了一些改变, 本文对这些改变做了汇总。

    用户1257393
  • Java面试基础必备知识点,怼死面试官,从我做起

    小海哥有话说 感觉最近支持我的人越来越多,谢谢大家,大家找到工作才是最重要的,我还是那句话,喜欢的就关注,想看深入研究的东西,等我更新完面试系列...

    用户1257393
  • OutOfMemoryError异常系列之Java堆溢出

    OOM异常是一种很常见的错误,但是更多的程序员对其更多的是一种迷惑,今天我就在这给大家讲讲OOM的几种情景。 Java堆溢出。 虚拟机栈和本地方法栈溢出。 方...

    用户1257393
  • Java 8 和 Java 9 中并发工具的改变

    Java 8 和 Java 9中 concurrent 包有了一些改变, 本文对这些改变做了汇总。

    用户1257393
  • 获取系统中环境信息

    何白白
  • java002-java学习路线

    ​ JSP(Java Server Pages) : Java服务器页面

    上善若水.夏
  • 2018-12-15 LintCode LeeCode刷题指南 part1

    从开始这个Github已经有将近两年时间, 很高兴这个repo可以帮到有需要的人. 我一直认为, 知识本身是无价的, 因此每逢闲暇, 我就会来维护这个repo,...

    Albert陈凯
  • 编程语言java与php之间不得不说的关系,网友:跟小编学习java吧

    程绝对是一件不轻松的活儿。随着电子商务在国内成功的推广,京东、苏宁等大型B2C综合网上商城的成功运营,一批批以产业分类的独立网店也如火如荼发展起来。伴随着这股热...

    java爱好者
  • J2那几个E和Web基础

    静儿
  • 18个Java小技巧,从运行、控制到框架

    1. JVM相关 JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。我在面试有超过3年Java经验的开发者的时候, J...

    BestSDK

扫码关注云+社区

领取腾讯云代金券