java8流应用

流(stream): 从支持数据处理操作的源生成的元素序列;

1、使用流:

  • 一个数据源(如集合)来执行一个查询;
  • 一个中间操作链,行程一条流的流水线;
  • 一个终端操作,执行流水线,并生成结果。

2、操作简介(图片来自-java+8实战):

java8流应用
java8流应用

3、终结操作 collect 执行流并生成结果的执行流程

java8流应用
其对应java 8 jdk源码:
java8流应用

并行流(parallelStream)

1、释义

一个将内容分成多个数据块,并用不同的线程分别处理每个数据块的流。

2、使用注意:

  • 1、并行使用的前提,在内核中并行执行工作的时间比在内核之间传输数据的时间要长。
  • 2、并行流的使用算法中不能改变共享变量的值或状态(即,并行流非现场安全的)。

3、配置并行流使用的线程池

并行流的内部默认使用了ForkJoinPool,默认线程数为处理器的数量n,n = Runtime.getRuntime().availableProcessors();
可以通过设置系统属性来更改n的大小,例如:
System.setProperty(“java.util.concurrent.ForkJoinPool.common.parallelism”,“10”);
此处应当谨慎修改
java8流应用

4、Spliterator

java8的新接口,“可拆分迭代器” ,同Iterator一样,用于遍历集合中的元素,Spliterator接口定义了结果接口,如下
java8流应用

java8中,Collection集合的所有的数据结构中都提供了默认的Spliterator实现
java8流应用
Spliterator接口中,最主要的是trySplit()方法,此方法就是Spliterator实现数据源的拆分,并让数据元素并行执行处理的主要方法,其原理如下

  • 并行流拆分数据源过程:
    java8流应用

  • 拆分对应的实现源码eg1:
    java8流应用

  • 拆分对应的实现源码eg2:java8流应用
    还有诸多实现,可查看java8 jdk源码
    java8流应用
    (PS:以上仅为个人学习的理解,如有不正确的对方,还望指正。)