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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM