Java 8在Lambda表达式、接口默认方式、新的日期API等方面引入的新特性广受关注,同时在并发编程方面也做出了大量改进。以往的几个Java版本都对java.util.concurrent做了不同程度的增强,比如Java 7的Fork/Join框架,而Java 8则进一步在java.util.concurrent下增加了新的接口、类与方法。
java.util.concurrent 中增加了两个接口四个类:
1.CompletableFuture.AsynchronousCompletionTask接口:标识在async方法中执行的异步任务。
2.CompletionStage<T>接口:异步计算中可能出现的一个阶段,也就是说当一个CompletionStage 完成时执行的动作或计算。
3.CompletableFuture<T>类:一个可以确定完成状态的Future。
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更适合做缓存了。
java.util.concurrent.atomic包的改进
java.util.concurrent.atomic包中增加了四个新的类:DoubleAccumulator、DoubleAdder、LongAccumulator、 LongAdder,这四个类的作者是并发大师Doug lea。
ForkJoinPool中增加新方法
Java 8除了对Fork-Join框架做了优化外,也为ForkJoinPool增加了两个静态方法:getCommonPoolParallelism() 、commonPool(),Oleg Shelajev在这篇博文中对Fork/Join做了详细的介绍并做了测试以比较其在JDK7、JDK8中的性能。
增加StampedLock类
StampedLock是一种新型锁的实现,很可能在大多数场景都可以替代ReentrantReadWriteLock。它为读写操作提供了三种模式:Writing、ReadingOptimistic、 Reading。
http://tech.it168.com/a2014/0421/1615/000001615329.shtml
- 高并发Java(1):前言
- 高并发Java(2):多线程基础
- 高并发Java(3):Java内存模型和线程安全
- 高并发Java(4):无锁
- 高并发Java(5):JDK并发包1
- 高并发Java(6):JDK并发包2
- 高并发Java(7):并发设计模式
- 高并发Java(8):NIO和AIO
- 高并发Java(9):锁的优化和注意事项
- 高并发Java(10):JDK8对并发的新支持
http://www.importnew.com/21358.html
首先Java的并行API演变历程是从:
1、1.0-1.4版本中的java.lang.Thread。
2、1.5版本中的java.util.concurrent。
3、1.6版本中的Phasers等。
4、1.7版本中的Fork/Join框架。
5、1.8版本中的Lambda。
http://blog.163.com/liuyong_xiaxia/blog/static/174355255201581561821988/
JDK8 lambdas 异常扩展:https://github.com/jOOQ/jOOL