资讯专栏INFORMATION COLUMN

Java8 parallelStream并行流

IT那活儿 / 500人阅读
Java8 parallelStream并行流

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


背景介绍

在我们开发的过程中,会遇到数据处理的情况,那么经常会用到for循环、java8的流处理等。
对于小数据量来说,for循环已经满足了需求,但是对于大数据量来说,for循环在处理数据的效率上就已经显得非常吃力。

在java8的流处理中有这么一个方法:parallelStream。初次接触就发现这个方法处理大数据时非常好用,下面就来分享一下使用详情。


对比结果

我们用几组数据对比一下for循环,java8 stream和 parallelStream处理数据的耗时。
  • For循环
  • Java8 stream和parallelStream

从上图我们可以看出,在相同的数据下,增强型for循环用时最长;java8 stram耗时次之,java8 parallelStream耗时最短。Stream在写法上较for循环精练很多,并且效率上也有相应的提升。而parallelStream其实是Stream的升级版,stream是串行操作,而parallelStream支持并行操作,从而提高程序运行效率。


深入了解

Java8的paralleStream用fork/join框架提供了并发执行能力。研究源码(这里就不细说源码了),通过paralleStream的foreach我们找到ForEachTask 类,我们可以用图形解释一下其所继承/实现的类之间的关系。

相信经常使用线程的朋友看到这里基本我们理解到paralleStream的原理了,其使用到future来合并多线程异步结果。
正如fork/join框架的思想,这里我用图形简单描述一下。
Fork/Join框架的基本思想就是将一个大任务分解(Fork)成一系列子任务,子任务可以继续往下分解,当多个不同的子任务都执行完成后,可以将它们各自的结果合并(Join)成一个大结果,最终合并成大任务的结果,即第一步是拆分,第二步是分开运算,第三步是合并。
这样我们就清楚了paralleStream效率提升的密码了。

总 结

1. 在大数据量的情况下,我们优先考虑paralleStream,数据量小用paralleStream完全没必要,而且耗内存。
2. 在使用paralleStream并行流的时候是无法保证元素的顺序的,也就是即使你用了同步集合也只能保证元素都正确但无法保证其中的顺序。


本文作者:段席超(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129156.html

相关文章

  • Java8(stream)操作

    摘要:串行与并行可以分为串行与并行两种,串行流和并行流差别就是单线程和多线程的执行。返回串行流返回并行流和方法返回的都是类型的对象,说明它们在功能的使用上是没差别的。唯一的差别就是单线程和多线程的执行。 Stream是什么 Stream是Java8中新加入的api,更准确的说: Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便...

    yacheng 评论0 收藏0
  • 乐字节-Java8新特性之Stream(上)

    摘要:需要注意的是很多流操作本身就会返回一个流,所以多个操作可以直接连接起来,如下图这样,操作可以进行链式调用,并且并行流还可以实现数据流并行处理操作。为集合创建并行流。 上一篇文章,小乐给大家介绍了《Java8新特性之方法引用》,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分。 1、什么是流? Java Se中对于流的操作有输入输出IO流,而Jav...

    dingda 评论0 收藏0
  • java8系列」式编程Stream

    摘要:前言系列神秘的系列神奇的函数式接口继上两篇之后,本文已经系列的第三篇了。相反,他们会返回一个持有结果的新。操作是延迟执行的。截断流,使其元素不超过给定数量。返回流中元素总数。返回流中最大值。 前言 「Java8系列」神秘的Lambda「Java8系列」神奇的函数式接口继上两篇之后,本文已经java8系列的第三篇了。本篇文章比较长,但我希望大家都能认真读完。读不完可以先收藏,在找时间读。...

    bovenson 评论0 收藏0
  • Stream与Lambda表达式(一) 杂谈

    摘要:一流转换为数组集合陈杨将流转换为数组将流转换为数组将流转换为集合将流转换为集合解析 一、流 转换为数组、集合 package com.java.design.java8.Stream; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context...

    Harpsichord1207 评论0 收藏0
  • Java8-

    摘要:因此,使用并行流需要考虑以下几点数据量将问题分解之后并行化处理,再将结果合并会带来额外的开销。 目录 简介 用法 例子 注意点 一. 简介 流是Java8引入的一个新特性,提供了对集合元素一系列便捷的操作,可以用很少的代码实现复杂的功能。流有两大类,分别是对象流(Stream),基本数据流(IntStream、LongStream、DoubleStream)。 二.用法 流的使用通...

    whinc 评论0 收藏0
  • Java8实战》-第四章读书笔记(引入Stream)

    摘要:内部迭代与使用迭代器显式迭代的集合不同,流的迭代操作是在背后进行的。流只能遍历一次请注意,和迭代器类似,流只能遍历一次。 流(Stream) 流是什么 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,你可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,你无需写任何多线程代码了!我会在后面的笔记中...

    _ivan 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<