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,可以看到结果:

  • 相关阅读:
    使用 kubeadm 部署 v1.18.5 版本 Kubernetes 集群
    MHA高可用主从复制实现
    基于Keepalived高可用集群的MariaDB读写分离机制实现
    MariaDB主从半同步复制详解
    postman学习网址
    程序员的脑子是更新换代最快的
    带组装3ROS_1节点_192通道
    带组装4ROS_1节点_256通道
    带组装5ROS_1node_320Chan
    带组装7ROS_1节点_448通道
  • 原文地址:https://www.cnblogs.com/wugang/p/14367605.html
Copyright © 2011-2022 走看看