直接调用parallelStream()是最常用方式,集合实例或顺序流均可转为并行流,底层共用ForkJoinPool.commonPool();需满足数据量大、单元素处理耗时长、无状态、数据源支持高效分割等条件才能真正加速。

直接调用集合的 parallelStream() 方法就能开启并行流,这是最常用、语义最清晰的方式。
两种主流开启方式
Java 提供了两种等效但适用场景略有差异的写法:
-
集合直接调用:适用于已有 List、Set 等 Collection 实例,代码简洁直观
List<Integer> list = Arrays.asList(1, 2, 3);<br>Stream<Integer> ps = list.parallelStream();
-
顺序流转为并行流:适合已存在串行流(比如来自 Stream.of 或文件读取),再动态切换
Stream<String> s = Stream.of("a", "b", "c");<br>Stream<String> ps = s.parallel();
底层其实共用同一个线程池
无论哪种方式,背后都使用 ForkJoinPool.commonPool(),默认线程数等于 CPU 可用核心数。不需要手动配置,也不建议轻易替换公共池——除非有特殊隔离需求。
别忘了它不是万能加速器
开启并行流只是第一步,真正发挥效果需要满足几个关键条件:
立即学习“Java免费学习笔记(深入)”;
- 数据量足够大(一般建议 ≥ 10 万条)
- 单个元素处理耗时明显(如 ≥ 1ms 的计算或正则匹配)
- 操作无状态:不读写共享可变变量,避免用 forEach 直接 add 到 ArrayList
- 数据源支持高效分割:优先用 ArrayList、数组;避开 LinkedList、Stream.generate()
验证是否真在并行执行
加一句日志就能确认:
.peek(x -> System.out.println(Thread.currentThread().getName() + ": " + x))- 如果输出中出现
ForkJoinPool.commonPool-worker-1、-2等多个线程名,说明已并行


















