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

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

2017第33周四JDK8并发的更多相关文章

  1. 并发设计模式和锁优化以及jdk8并发新特性

    1 设计模式 (1) 单例模式 保证一个类只能一个对象实现.正常的单例模式分为懒汉式和饿汉式,饿汉式就是把单例声明称static a=new A(),系统第一次调用的时候生成(包括调用该类的其他静态资 ...

  2. Learning-Python【33】:并发编程之多进程

    一.multiprocessing 模块介绍 Python 中的多线程无法利用多核优势,如果想要充分地使用多核 CPU 的资源(os.cpu_count()查看),在 Python 中大部分情况需要使 ...

  3. [转]教你十分钟下载并破解IntelliJ IDEA(2017)

    来源:http://www.itwendao.com/article/detail/400687.html 温馨提示:IntelliJ IDEA(2017)需要安装JDK8以上才能运行 如果你是JDK ...

  4. 【多线程系列】AQS CAS简单介绍

    一.什么是CAS CAS(Compare And Swap),即比较并交换.是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V).预期原值(A)和新值(B). ...

  5. python基础之2

    1.模块 sys模块注意:python文件的文件名一定不能和下面的要导入的模块同名,如:sys_mokuai.py windows下的python3里直接运行: import sys    ----- ...

  6. Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)

    一,Nginx基本安全优化 1.1 调整参数隐藏Nginx软件版本号信息 一般来说,软件的漏洞都和版本有关,这个很像汽车的缺陷,同一批次的要有问题就都有问题,别的批次可能就都是好的.因此,我们应尽量隐 ...

  7. Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践

    1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...

  8. Net环境下比较流行的ORM框架对比

    个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使 ...

  9. 构建Docker+Jenkins持续集成环境

    docker和Jenkins不是什么新东西了,两者结合也不是什么稀奇的事情,也已经有很多Jenkins和docker相结合的文章,此文仅为自己的一点心得实践,如有不对的地方,欢迎大家纠正. 先贴上大致 ...

随机推荐

  1. Spring《七》ApplicationContext

    1.国际化支持 getMessage()提供了国际化支持. Bean中必须定义为messageSource. <bean id="messageSource" class=& ...

  2. 3.TinkPHP中的模型

    1.配置数据库的连接设置 数据库的连接配置项可以在系统的主配置文件中 2.什么是模型? 模型是MVC 三大组成部分的M,作用是负责与数据表达额交互(CRUD) 3.模型的创建 命名规范:不带前缀的标明 ...

  3. /etc/rsyslog.conf配置文件说明

    一.authpriv.*                                      /var/log/secure 服务名称[连接符号]日志等级               日志记录位 ...

  4. 文件被占用导致Hive Load文件不成功

    用Python写了个用LOAD命令将文件导入Hive的程序,开始代码写成下面这样: def loadToHive(bakFilePath, tbName): try: transport = TSoc ...

  5. VHDL之Aggregate

    Definition A basic operation that combines one or more values into a composite value of a record or ...

  6. 00-- 关于C++ const 的全面总结

    转:关于C++ const 的全面总结 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C ...

  7. openlayers5学习笔记-添加Overlay

    tmp.addPosition = function (map, item) { var ele = document.createElement("div"); var img ...

  8. 路飞学城Python-Day108

    96-分页器1 批量插入的方式就不能用ORM的create()方式去做了,因为create就是对sql进行insert的操作,sql最好不要每次有一条数据就去进行插入,最好的方式就是插入一组数据 fr ...

  9. 关于TCP中对于ACK报文是否需要确认的理解

    首先,TCP是一个面向字节流的协议,它不会对自己的内容做出任何的解释,也不需要做出解释,具体的解释由上层的协议来处理. 其次,TCP是一个面向字节流的协议,它会对它发送的每一个字节负责,确保每一个字节 ...

  10. F5 datasheet