首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >优化 Stream并行流 性能 parallelStream

优化 Stream并行流 性能 parallelStream

作者头像
收心
发布2025-12-24 17:46:55
发布2025-12-24 17:46:55
240
举报
文章被收录于专栏:Java实战博客Java实战博客

优化并行流性能可以从以下几个方面入手:

数据量足够大 并行流适合处理大数据量的场景,小数据量使用并行流可能会因为线程切换开销导致性能下降。

数据源选择

使用 ArrayList 或数组作为数据源,因其支持高效的分片操作。 避免使用 LinkedList 或 Stream.iterate,它们的分片性能较差。 合理设置线程池 默认情况下,并行流使用 ForkJoinPool.commonPool,线程数为 CPU核心数。可以通过设置 java.util.concurrent.ForkJoinPool.common.parallelism 系统属性调整线程数:

代码语言:javascript
复制
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "8");

减少共享资源竞争 避免在并行流中修改共享变量,尽量使用线程安全的数据结构或无状态操作。

避免阻塞操作 并行流中的操作应尽量避免 I/O 或锁竞争等阻塞操作。

使用 Collectors.toConcurrentMap 在并行流中收集结果时,使用线程安全的收集器,如 Collectors.toConcurrentMap 或 ConcurrentHashMap。

性能监控与调试 使用 System.nanoTime() 或性能分析工具监控并行流的执行时间,判断是否需要优化。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ForkJoinPool;
import java.util.stream.IntStream;

public class ParallelStreamOptimization {
    public static void main(String[] args) {
        // 设置并行线程数
        System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "8");

        // 数据源:ArrayList
        List<Integer> numbers = new ArrayList<>();
        IntStream.range(0, 1_000_000).forEach(numbers::add);

        // 并行流处理
        long start = System.nanoTime();
        long sum = numbers.parallelStream()
                .mapToLong(i -> i * 2L)
                .sum();
        long end = System.nanoTime();

        System.out.println("结果: " + sum);
        System.out.println("耗时: " + (end - start) / 1_000_000 + " ms");
    }
}

特殊说明: 上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com 第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤ 免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档