java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java 并行流

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

作者:心本不二

parallelStream是Java 8中的一种流处理方式,通过并行流利用多核CPU提高数据处理效率,本文主要介绍了Java 并行流(parallelStream)的具体使用小结,具有一定的参考价值,感兴趣的可以了解一下

1. 什么是 parallelStream?

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

2. parallelStream 的优势

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实现线程安全的分组操作

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. 总结

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

您可能感兴趣的文章:
阅读全文