本文首发于InfoQ。
Java 8在Lambda表达式、接口默认方式、新的日期API等方面引入的新特性广受关注,同时在并发编程方面也做出了大量改进。以往的几个Java版本都对 java.util.concurrent做了不同程度的增强,比如Java 7的Fork/Join框架,而Java 8则进一步在java.util.concurrent下增加了新的接口、类与方法。目前java.util.concurrent的官方文档已经更新,变更部分总结如下:
新的类以及接口
java.util.concurrent 中增加了两个接口四个类:
- CompletableFuture.AsynchronousCompletionTask接口:标识在async方法中执行的异步任务。
- CompletionStage<T>接口:异步计算中可能出现的一个阶段,也就是说当一个CompletionStage 完成时执行的动作或计算。
- CompletableFuture<T>类:一个可以确定完成状态的Future。有关CompletableFuture的详细用法可参考NoBlogDefFound上的《Java 8: CompletableFuture in action》一文。
- ConcurrentHashMap.KeySetView<K,V>类:ConcurrentHashMap 的键的集合视图。
- CountedCompleter<T>类:一个在没有其他action等待的情况下,会执行一个完成action的 ForkJoinTask 。
- 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并发编程方面特性的详细介绍可从官方文档获取。
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java SE 8 在并发工具方面的加强
http://ifeve.com/java-se-8-concurrent-tool-enhance/
相关推荐
Java Platform Standard Edition 8(Java SE 8)是Java开发工具包的一个重要版本,它为开发者提供了构建桌面应用、Web应用以及分布式系统的基础框架。Java SE 8的发布标志着Java语言的重大变革,引入了许多新特性,...
在函数式编程方面,Java 8引入了`Function`, `Predicate`, `Supplier`, `Consumer`等接口,以及`java.util.stream.Stream`,使得开发者能够利用函数式编程风格来处理数据,这在大数据处理和并行计算中特别有用。...
9. **类型注解**:Java 8允许在类型声明(包括参数、返回值、字段和局部变量)上使用注解,增强了代码的可验证性和元数据信息。 10. **Nashorn JavaScript引擎**:Java 8内置了一个JavaScript引擎,允许Java程序...
8. **并发改进**:JDK 8对并发工具进行了优化,例如`ForkJoinPool`和`Parallel Streams`,提供了更好的并行计算能力。 安装JDK 8u181后,开发者可以通过`javac`编译器将源代码编译为字节码,然后使用`java`命令运行...
Java Platform Standard Edition 8(Java SE 8)是Java编程语言和平台的一个重要版本,它在2014年发布,引入了许多创新功能和改进,为开发者提供了更强大的工具和性能优化。Java SE 8是Java开发的基础,包含了运行...
6. **并发编程**:Java 8对并发库进行了改进,如Fork/Join框架和并发集合的增强。这部分将深入讲解如何有效地利用多核处理器,以及如何使用CompletableFuture来处理异步编程。 7. **类型推断与方法参考**:Java 8...
其次,Java SE6在并发编程方面有了显著的进步。书中详细讲解了Java并发API,如ExecutorService、Future和Callable接口,这些工具大大简化了多线程程序的设计和管理。还有并发工具类,如Semaphore、CyclicBarrier和...
Java SE Development Kit 8,简称JDK 8,是Oracle公司发布的Java开发工具包,用于构建和运行Java应用程序。它是Java Standard Edition(SE)的一部分,适用于桌面应用和服务器环境。JDK 8是Java发展历程中的一个重要...
4. **Java应用程序接口(API)更新**:在8u144版本中,可能有新的API或者现有API的增强,比如Lambda表达式和流API的引入,增强了函数式编程能力,以及并发编程的改进等。 5. **模块系统(Project Jigsaw)**:虽然...
Java提供了丰富的并发工具,如ExecutorService、Semaphore、CountDownLatch等,帮助开发者构建高效的多线程程序。Java 8的并发API进一步增强,比如Fork/Join框架和CompletableFuture,简化了异步编程。 八、日期和...
Java EE 6为企业级应用开发提供了强大的工具和框架,而Java SE 8则通过引入新特性提升了开发者的生产力和代码质量。对于Java开发者来说,理解和掌握这两个版本的核心特性是必不可少的。通过深入学习和实践,可以提升...
Java SE8是Java编程语言的一个重要版本,它引入了Lambda表达式和Stream API等重要特性,大大增强了Java语言的函数式编程能力以及对多核处理器的友好性。 书中首先提到了Java SE8的一些设计标志,这些标志是制造商和...
4. 并发与多线程:Java SE 7提供了新的并发工具,如Fork/Join框架,用于解决大规模并行计算问题。它通过工作窃取算法,有效地利用多核处理器资源。 5. 文件系统API增强:NIO.2引入了新的文件系统API,提供了更丰富...
Java SE(标准版)是Java开发平台的核心,用于构建桌面应用程序和服务器端应用。这个"Java SE学习教程"涵盖了Java编程的基础以及面向对象的概念,旨在帮助开发者深入理解Java语言。 一、Java语言基础 Java是一种强...
8. **Java SE 6.0的新特性**:在Java SE 6.0版本中,有一些重要的改进和新特性,如增强的for循环(foreach)、可变参数(varargs)、自动装箱和拆箱,以及枚举类型的引入等,这些都提升了Java的易用性和效率。...
8. **并发工具**:Java并发包(java.util.concurrent)新增了更多的并发控制工具,如CyclicBarrier和Phaser,帮助开发者编写多线程程序。 9. **Java Web Start和Applets**:Java Web Start技术允许用户从Web浏览器...
6. 并发编程改进:Java SE8对并发编程也有所改进,如`ForkJoinPool`和`CompletableFuture`,可以用来优化多线程的性能。在猜拳游戏中,如果需要异步处理用户输入或计算结果,这些工具会派上用场。 7. Default方法:...
- **并发包**:提供了高级的并发工具,如`ExecutorService`和`ConcurrentHashMap`等,以支持多线程编程。 - **XML Web服务**:增强了对SOAP和WS-I基本配置的支持。 - **Swing改进**:新增了更多的GUI组件,并改进了...
9. **并发和多线程**:Java 8在java.util.concurrent包中增强了并发工具,如ForkJoinPool和Parallel Streams,提升了并行计算的性能。 10. **类型推断**:编译器在Java 8中可以更好地推断泛型实例化时的类型,使得...