Java Parallel Streams
ParallelStream并行流是 Java 8 Stream API 提供的多核并行处理能力底层基于Fork/Join 分治框架自动拆分任务、多线程执行、合并结果无需手动写线程池 / 线程大幅简化并发集合处理。一、基础概念与用法1. 两种创建方式// 方式1集合直接获取并行流 list.parallelStream() // 方式2普通串行流转并行流 list.stream().parallel()2.用法ListInteger list Arrays.asList(1,2,3,4,5,6,7,8); // 并行流计算平方和 long sum list.parallelStream() .map(x - x*x) .reduce(0, Long::sum);3. 串行 vs 并行流对比特性串行流 stream ()并行流 parallelStream ()执行线程单线程顺序执行多线程、多核并行执行底层无线程池ForkJoinPool.commonPool () 公共线程池执行顺序严格保证原顺序无序执行默认性能小数据快大数据、计算密集快线程安全无需考虑必须无状态、无共享可变变量二、底层原理Fork/Join 分治并行流执行流程Fork 拆分 → 并行执行 → Join 合并Fork把大集合递归拆分成足够小的子任务并行执行子任务提交到 ForkJoinPool多核 CPU 并行处理Join汇总所有子任务结果得到最终结果默认线程池配置默认使用全局公共池ForkJoinPool.commonPool()并行线程数 CPU 核心数 - 1全局共享所有并行流共用同一个线程池可 JVM 参数修改全局并行度System.setProperty(java.util.concurrent.ForkJoinPool.common.parallelism, 8);底层执行机制工作窃取这是并行流高效的核心每个线程有自己的任务队列自己的任务做完了会偷取其他线程的任务执行最大化利用 CPU避免线程空闲三、适合使用并行流的场景同时满足大数据量一般 1 万条元素小数据并行开销收益计算密集型数学运算、转换、过滤非 IO 阻塞数据库、网络、文件无状态、无依赖每个元素处理独立不依赖其他元素无序可接受不严格要求处理 / 输出顺序数据源支持高效拆分ArrayList、数组最优LinkedList 不适合并行无法随机拆分四、不适合场景IO 密集、阻塞操作数据库查询、RPC、网络、文件读写公共线程池线程极少阻塞会堵死全局所有并行流Web 服务极易雪崩小数据集任务拆分 线程调度开销并行收益反而更慢强顺序依赖findFirst()、limit()、forEach有序输出、sorted排序修改外部共享可变变量 / 非线程安全集合竞态条件、数据错乱Web 高并发接口默认不建议直接用公共并行流资源全局争用