美文网首页
stream 并行操作

stream 并行操作

作者: Let_me_think | 来源:发表于2018-08-03 17:53 被阅读0次

如果要使stream中的操作并行,使用起来非常简单,只要加parallel()就可以了

    public static void main(String[] args) throws Exception {
        /**
         * 并行操作:parallel()
         * 顺序操作:sequential()
         */
        Optional<Integer> max = Stream.iterate(1, x -> x + 1).limit(20000).parallel().peek(x -> {
            System.out.println(Thread.currentThread().getName());
        }).max(Integer::compare);
        System.out.println(max.get());
    }

反之如果,想要让并行转换为串行也只要加sequential()

    public static void main(String[] args) throws Exception {
        /**
         * 并行操作:parallel()
         * 顺序操作:sequential()
         */
        Optional<Integer> max = Stream.iterate(1, x -> x + 1).limit(20000).parallel().sequential().peek(x -> {
            System.out.println(Thread.currentThread().getName());
        }).max(Integer::compare);
        System.out.println(max.get());
    }

sequential()和parallel()的前后位置决定了最后谁生效,最后一个声明会生效.

此外,stream api流用的线程池是

ForkJoinPool.commonPool()

内部默认核心线程数量是cpu的核心数

/**
     * Creates a {@code ForkJoinPool} with parallelism equal to {@link
     * java.lang.Runtime#availableProcessors}, using the {@linkplain
     * #defaultForkJoinWorkerThreadFactory default thread factory},
     * no UncaughtExceptionHandler, and non-async LIFO processing mode.
     *
     * @throws SecurityException if a security manager exists and
     *         the caller is not permitted to modify threads
     *         because it does not hold {@link
     *         java.lang.RuntimePermission}{@code ("modifyThread")}
     */
    public ForkJoinPool() {
        this(Math.min(MAX_CAP, Runtime.getRuntime().availableProcessors()),
             defaultForkJoinWorkerThreadFactory, null, false);
    }

如果需要手动执行线程数的话可以使用

//设置为5个线程加上主线程就是6个线程在同时执行
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","5");

当然也可以在java程序启动时,给定参数

-D java.util.concurrent.ForkJoinPool.common.parallelism=5
也可以达到相同的效果

相关文章

  • 8-20 JDK8的新特性;

    Stream 接口: Java.util.stream stream的操作可以串行执行或者并行执行 JAVA 8 ...

  • stream 并行操作

    如果要使stream中的操作并行,使用起来非常简单,只要加parallel()就可以了 反之如果,想要让并行转换为...

  • Java 8 之Stream 生成姿势

    Stream 的定义 支持顺序和并行聚合操作的元素序列 可以由数组、集合以及文件转换而成 Stream 消费完之后...

  • Java Stream 与kotlin迭代器的比较

    Stream 严格上在长链式调用的时候有性能优势 Stream 可以并行化操作,kotlin迭代器只能命令式地、串...

  • java1.8中stream的性能

    对于简单操作,比如最简单的遍历,Stream串行API性能明显差于显示迭代,但并行的Stream API能够发挥多...

  • 【Java8新特性】Streams(流)

    Java 8 引入了Stream(流式操作),你可以通过该操作实现对集合的并行处理和函数式操作。Collectio...

  • java8 Stream常用功能

    Java 8 引入了流式操作(Stream),通过该操作可以实现对集合(Collection)的并行处理和函数式操...

  • 【Java 8实战笔记】为什么要关心Java 8

    概述部分 使用Java8新的API,流(Stream),它支持许多处理数据的并行操作,由Stream库来选择最佳低...

  • 2019-02-02——Java8 Stream

    Stream分为两种: 串行流——stream() 并行流——parallelStream() Stream的特性...

  • 为什么要关心Java8

    Stream API java8提供了一个新的API,简称Stream。它支持多核处理器并行操作,很多思路来源于数...

网友评论

      本文标题:stream 并行操作

      本文链接:https://www.haomeiwen.com/subject/axduvftx.html