【JDK 8-集合框架进阶】6.1 parallelStream 并行流

[一、parallelStream 并行流](#一、parallelStream 并行流)

[1.1 串行 和 并行的区别](#1.1 串行 和 并行的区别)

[> 执行结果](#> 执行结果)

二、问题

[2.1 paralleStream 并行是否一定比 Stream 串行快?](#2.1 paralleStream 并行是否一定比 Stream 串行快?)

[2.2 是否可以都用并行?](#2.2 是否可以都用并行?)

[> 报错](#> 报错)

三、实战

[> 执行结果](#> 执行结果)

四、总结


一、parallelStream 并行流

  • 多线程并发处理,速度快

  • fork/join 框架提供了并发执行能力

  • 底层原理: 线程池(ForkjoinPool) 维护一个线程队列,将父任务拆分成子任务

1.1 串行 和 并行的区别

java 复制代码
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
        System.out.println(">> 【串行 stream()】单线程");
        list.stream().forEach(System.out::println);
        System.out.println(">> 【并行 parallelStream()】多线程");
        list.parallelStream().forEach(System.out::println);

    }

> 执行结果

二、问题

2.1 paralleStream 并行是否一定比 Stream 串行快?

  • 错误,数据量少的情况,可能串行更快,ForkJoin会耗性能。

  • 多数情况下并行比串行快

2.2 是否可以都用并行?

  • 不行,部分情况会有线程安全问题,parallelStream里面使用的外部变量,比如集合一定要使用线程安全集合,不然就会引发多线程安全问题
java 复制代码
        for (int i = 0; i < 10; i++) {
            List list1 = new ArrayList();
            IntStream.range(0,100).parallel().forEach(list1::add);
            System.out.println(list1.size());
        }

> 报错

三、实战

java 复制代码
        for (int i = 0; i < 10; i++) {
            List list1 = new CopyOnWriteArrayList();
            IntStream.range(0,100).parallel().forEach(list1::add);
            System.out.println(list1.size());
        }

> 执行结果

四、总结

一般 list.size()

  • 几十个:使用 Stream

  • 几百个以上:paralleStream

相关推荐
毕设源码-赖学姐几秒前
【开题答辩全过程】以 高校体育场馆管理系统为例,包含答辩的问题和答案
java·spring boot
我真会写代码2 分钟前
SSM(指南一)---Maven项目管理从入门到精通|高质量实操指南
java·spring·tomcat·maven·ssm
vx_Biye_Design2 分钟前
【关注可免费领取源码】房屋出租系统的设计与实现--毕设附源码40805
java·spring boot·spring·spring cloud·servlet·eclipse·课程设计
java干货6 分钟前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法
_F_y6 分钟前
C语言重点知识总结(含KMP详细讲解)
c语言·开发语言
DN金猿8 分钟前
接口路径正确,请求接口却提示404
java·tomcat
毕设源码-郭学长8 分钟前
【开题答辩全过程】以 基于python的二手房数据分析与可视化为例,包含答辩的问题和答案
开发语言·python·数据分析
无小道31 分钟前
Qt——常用控件
开发语言·qt
爱学习的阿磊39 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
Maynor9961 小时前
OpenClaw 玩家必备:用 AI 自动追踪社区最新动态
java·服务器·人工智能