zoukankan      html  css  js  c++  java
  • 并行库parallelStream设置并行数量

    为什么要使用并行库

    在java中,我们通常使用并行库,达到对多核处理器的最大利用,提高程序执行效率。在java8中,我们可以使用parallelStream来做一些并行处理。

        public static void main(String[] args) {
           testParalle();
        }
    
        private static void testParalle(){
            Stream<Integer> parallel = Arrays.asList(1, 2, 3, 5, 6, 7,8).stream().parallel();
            parallel.forEach(Application::doSome);
        }
    
        private static void doSome(int num) {
            try {
                System.out.println(String.format("time:%s begin:%s",LocalTime.now(),num));
                Thread.sleep(num * 500);
                System.out.println(String.format("time:%s end:%s",LocalTime.now(),num));
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    

    并行库的底层

    parallelStream默认使用了fork/join框架,其默认线程数是CPU核心数

    观察运行结果,可以发现只有4个并行,再次证实了该点(我的cpu是4核)

    设置并行数

    在某些场景中,我们不希望抢占所有的CPU核心。可以通过ForkJoinPool来设置并行数

    public static void main(String[] args) {
          //testParalle();
          testParalleNum(2);
    }
    public static void testParalleNum(int parallelism) {
            Stream<Integer> stream = Arrays.asList(1, 2, 3, 5, 6, 7,8).stream();
            new ForkJoinPool(parallelism).submit(() -> stream.parallel().forEach(Application::doSome)).join();
        }
    
    

    在这里,我们将并行数设置为2,可以看到结果:

  • 相关阅读:
    视图&索引&序列
    PL/SQL语言基础
    C#实现递归矩阵连乘(动态规划的递归自顶向下,非递归自地向上)
    JS 第五课
    请问,小丽的鞋子到底是什么颜色的?
    用10!来回顾 PL/SQL语言基础 && 标准异常名
    SELECT 查询—子查询
    备份和恢复
    JS 第六课
    Linux学习之二Linux系统的目录结构
  • 原文地址:https://www.cnblogs.com/wugang/p/14367605.html
Copyright © 2011-2022 走看看