首页 > 解决方案 > 简单地调用 parallelStream 是否并行运行任务?

问题描述

我在互联网上看到了一堆示例,为了使用流 API 来执行并行操作,只需.parallelStream()像这样调用方法:

mySet
    .parallelStream()
    ... // do my fancy stuff and collect

但在其他情况下,我看到在线程池提交中使用并行流,如下所示:

ForkJoinPool.commonPool().submit(() -> {
    mySet
        .parallelStream()
        ... // do my fancy stuff and collect
})

只是调用会parallelStream()执行多个并发线程中接下来发生的任何事情吗?就像在一些预先配置的线程池或其他东西中一样。还是我必须创建我的线程然后使用并行流?

标签: javaconcurrencyparallel-processingjava-stream

解决方案


parallelStream的,并行运行。

通常,当有一个长时间运行的并行流时,您不想在其上运行它,commonPool因为所有其他并行流也在使用它。

这个顺便说一句是一个实现细节,因为流没有指定它们将用于并行处理的池,但在当前实现下你不应该使用ForkJoinPool.commonPool(),而是创建一个新池:

ForkJoinPool pool = new ForkJoinPool(2);

pool().submit(() -> {
mySet
    .parallelStream()
    ... // do my fancy stuff and collect
})

推荐阅读