Java 8 和 Java 9中 concurrent
包有了一些改变, 本文对这些改变做了汇总。
Java 8 中 Concurrent package的改变
java.util.concurrent中新的类和接口
增加了两个新接口和4个新类:
- 接口CompletableFuture.AsynchronousCompletionTask
- 类ConcurrentHashMap.KeySetView<K,V>
- 类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