是否简单地调用parallelStream并行运行任务?

时间:2018-08-31 20:04:08

标签: java concurrency parallel-processing java-stream

我在互联网上看到了很多示例,为了使用流API进行并行处理,只需调用.parallelStream()方法,如下所示:

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

但是在其他情况下,我看到在线程池提交中使用了并行流,就像这样:

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

仅调用parallelStream()会执行多个并发线程中接下来执行的操作吗?就像在一些预配置的线程池中一样。还是我必须先创建线程,然后使用并行流?

1 个答案:

答案 0 :(得分:5)

是的parallelStream是并行运行的事物。

通常,当并行运行的流很长时,您不想在commonPool上运行它,因为所有 other 并行流也都在使用它。

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

ForkJoinPool pool = new ForkJoinPool(2);

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