Java 并行流(parallelStream)的具体使用小结

 更新时间:2025年11月26日 09:30:14   作者:心本不二  
parallelStream是Java 8中的一种流处理方式,通过并行流利用多核CPU提高数据处理效率,本文主要介绍了Java 并行流(parallelStream)的具体使用小结,具有一定的参考价值,感兴趣的可以了解一下

1. 什么是 parallelStream?

在 Java 8 中,Stream API 提供了 stream()parallelStream() 两种流处理方式。

  • stream() 采用顺序流处理数据,每个元素按照流的顺序依次处理。
  • parallelStream() 采用并行流处理数据,利用 ForkJoinPool 并发执行,提高处理效率。

2. parallelStream 的优势

  • 充分利用多核 CPU:并行流会将任务拆分为多个子任务,并分配到多个 CPU 核心执行。
  • 提升处理速度:适用于计算密集型任务,能明显提高大数据量的处理效率。
  • API 友好parallelStream() 的使用方式与 stream() 类似,开发成本较低。

3. parallelStream 的使用

3.1 基本使用

import java.util.Arrays;
import java.util.List;

public class ParallelStreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("A", "B", "C", "D", "E", "F");
        
        // 使用并行流处理数据
        list.parallelStream().forEach(System.out::println);
    }
}

注意:并行流的输出顺序是无序的,因为多个线程并发执行。

3.2 计算总和示例

import java.util.stream.IntStream;

public class ParallelSum {
    public static void main(String[] args) {
        int sum = IntStream.rangeClosed(1, 100)
                           .parallel()
                           .sum();
        System.out.println("Sum: " + sum);
    }
}

3.3 结合groupingByConcurrent实现线程安全的分组操作

  • 使用parallelStream将分组过程并行化提升效率,使用groupingByConcurrentConcurrentMap避免出现线程安全的问题
Map<String, List<CourseGrade>> collect = courseGrades
										.parallelStream()
										.collect(Collectors.groupingByConcurrent(CourseGrade::getYear));

4. parallelStream 的注意事项

4.1 适用场景

适用场景不适用场景
数据量大数据量小
计算密集型任务IO 密集型任务
不关心执行顺序需要严格顺序执行
需要提升性能线程切换成本高

4.2 并行流的局限性

  1. 线程开销:并行流会使用 ForkJoinPool 线程池,线程的创建和切换会带来一定的开销。
  2. 数据竞争:如果流操作涉及共享变量,可能会出现线程安全问题。
  3. 不适合小数据量:并行执行存在一定的启动成本,数据量太小可能会降低性能。

5. 控制并行流线程数

默认情况下,parallelStream() 使用 ForkJoinPool公共线程池,线程数与 CPU 核心数相同。

如果需要自定义线程池大小,可以使用以下方式:

import java.util.concurrent.ForkJoinPool;
import java.util.stream.IntStream;

public class CustomParallelStream {
    public static void main(String[] args) {
        ForkJoinPool customPool = new ForkJoinPool(4); // 设置 4 个线程
        
        customPool.submit(() ->
            System.out.println(IntStream.range(1, 100)
                    .parallel()
                    .sum())
        ).join();
        
        customPool.shutdown();
    }
}

6. 总结

  • parallelStream() 能有效提高大数据量的处理效率。
  • 适用于计算密集型任务,但可能不适用于 IO 密集型任务。
  • 默认使用 ForkJoinPool,可以自定义线程池大小。
  • 需谨慎使用,避免线程安全问题和不必要的开销。

到此这篇关于Java 并行流(parallelStream)的具体使用小结的文章就介绍到这了,更多相关Java 并行流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot集成nacos动态刷新数据源的实现示例

    SpringBoot集成nacos动态刷新数据源的实现示例

    这篇文章主要介绍了SpringBoot集成nacos动态刷新数据源的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java实现Excel转换为图片

    java实现Excel转换为图片

    在实际开发过程中,经常会有这样的需求,需要将Excel表格或特定区域转换为图片,所以小编今天就来为大家介绍一下如何使用Java将Excel转化为图片吧
    2023-10-10
  • java中xml进行报文发送和解析操作

    java中xml进行报文发送和解析操作

    这篇文章主要介绍了java中xml进行报文发送和解析操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • springsecurity中http.permitall与web.ignoring的区别说明

    springsecurity中http.permitall与web.ignoring的区别说明

    这篇文章主要介绍了springsecurity中http.permitall与web.ignoring的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Spring Boot2升级到3的详细步骤记录

    Spring Boot2升级到3的详细步骤记录

    从Spring Boot 2到Spring Boot 3的升级是一次全面而深刻的变革,它不仅带来了技术栈的更新和新特性的引入,还显著提升了应用的性能和开发效率,这篇文章主要介绍了Spring Boot2升级到3的详细步骤,需要的朋友可以参考下
    2025-08-08
  • Java接口方法默认静态实现代码实例

    Java接口方法默认静态实现代码实例

    这篇文章主要介绍了Java接口方法默认静态实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • SpringBoot雪花算法主键ID传到前端后精度丢失问题的解决

    SpringBoot雪花算法主键ID传到前端后精度丢失问题的解决

    本文主要介绍了SpringBoot雪花算法主键ID传到前端后精度丢失问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 把Jar文件转成exe安装文件的实现方法

    把Jar文件转成exe安装文件的实现方法

    下面小编就为大家带来一篇把Jar文件转成exe安装文件的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • JDK集合源码之解析TreeMap(二)

    JDK集合源码之解析TreeMap(二)

    下面小编就为大家带来一篇浅谈java中的TreeMap 排序与TreeSet 排序。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-07-07
  • mybatis主从表关联查询,返回对象带有集合属性解析

    mybatis主从表关联查询,返回对象带有集合属性解析

    这篇文章主要介绍了mybatis主从表关联查询,返回对象带有集合属性解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论