Java8---并行流

来源:互联网 发布:java void方法结束 编辑:程序博客网 时间:2024/05/19 23:16

1、回顾jdk1.7的fork/join

工作窃取算法:线程维护一个双端任务队列,一个线程自己队列的任务执行完毕,到其他线程的队尾窃取一个任务执行。

fork/join使用过程:

1.创建一个继承RecursiveAction/RecursiveTask的ForkJoinTask类,并实现里面的protected compute方法

2.创建一个ForkJoinPool线程池

3.创建一个任务对象

4.调用线程池的invoke方法或者submit方法 提交task

5.关闭线程池 shutdown

2.Java8并行流

Java7中的fork/join在数据量大、拆分合理的情况下效率要高于串行过程,但Java8提供的并行流可以更高效的完成,而且实现简单,还是以1加到100亿为例子。

Java8的parallel的底层也是依照fork/join模式完成的,这里的优于我们在Java7中写的例子,可能是我们compute部分不够优化

public static void main(String[] args){long start=System.currentTimeMillis();Long sum=LongStream.range(0,10000000000L).parallel().reduce(0,Long::sum);System.out.println(sum);long end=System.currentTimeMillis();System.out.println(end-start);}

3.Java8   通用池

Java8为ForkJoinPool增加了通用池功能

ForkJoinPool commonPool()  该方法返回一个通用池,通用池状态不会受shutdown或者shutdownNow影响,如果执行System.exit肯定会终止。  getCommonPoolParallelism返回通用池的并行级别。

0 0
原创粉丝点击