zoukankan      html  css  js  c++  java
  • 自定义parallelStream的thread pool

    自定义parallelStream的thread pool

    简介

    之前我们讲到parallelStream的底层使用到了ForkJoinPool来提交任务的,默认情况下ForkJoinPool为每一个处理器创建一个线程,parallelStream如果没有特别指明的情况下,都会使用这个共享线程池来提交任务。

    那么在特定的情况下,我们想使用自定义的ForkJoinPool该怎么处理呢?

    通常操作

    假如我们想做一个从1到1000的加法,我们可以用并行stream这样做:

    List<Integer> integerList= IntStream.range(1,1000).boxed().collect(Collectors.toList());
            ForkJoinPool customThreadPool = new ForkJoinPool(4);
    
            Integer total= integerList.parallelStream().reduce(0, Integer::sum);
            log.info("{}",total);
    

    输出结果:

    
    INFO com.flydean.CustThreadPool - 499500
    

    使用自定义ForkJoinPool

    上面的例子使用的共享的thread pool。 我们看下怎么使用自定义的thread pool来提交并行stream:

    List<Integer> integerList= IntStream.range(1,1000).boxed().collect(Collectors.toList());
    
    ForkJoinPool customThreadPool = new ForkJoinPool(4);
            Integer actualTotal = customThreadPool.submit(
                    () -> integerList.parallelStream().reduce(0, Integer::sum)).get();
            log.info("{}",actualTotal);
    

    上面的例子中,我们定义了一个4个线程的ForkJoinPool,并使用它来提交了这个parallelStream。

    输出结果:

    INFO com.flydean.CustThreadPool - 499500
    

    总结

    如果不想使用公共的线程池,则可以使用自定义的ForkJoinPool来提交。

    本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-cust-threadpool

    欢迎关注我的公众号:程序那些事,更多精彩等着您!
    更多内容请访问 www.flydean.com

  • 相关阅读:
    常见算法复杂度解析
    Linux shell脚本根据文件路径信息获取路径和名称
    linux 目录递归替换差异文件
    Linux普通用户具备root用户操作权限
    java线上异常定位工具
    OCR
    国内镜像
    hadoop镜像
    处理Jsp出现乱码问题
    无缝滚动
  • 原文地址:https://www.cnblogs.com/flydean/p/java-8-stream-cust-pool.html
Copyright © 2011-2022 走看看