java8流应用

本文介绍了Java 8中的流(Stream)概念,包括流的生成、中间操作和终结操作collect的执行流程。同时详细讲解了并行流(parallelStream),强调了并行流的使用条件、注意事项及如何配置线程池。最后提到了Spliterator接口在并行流中的作用及其拆分数据源的过程。

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

1、使用流:
  • 一个数据源(如集合)来执行一个查询;
  • 一个中间操作链,行程一条流的流水线;
  • 一个终端操作,执行流水线,并生成结果。
2、操作简介(图片来自-java+8实战):

java8流操作
java8流使用简介

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

collect执行流程
其对应java 8 jdk源码:
源码1

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值