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

Luc*_*old 5 java parallel-processing concurrency java-stream

我在互联网上看到了一些例子,为了使用流API来做并行的东西,只需调用这样的.parallelStream()方法:

mySet
    .parallelStream()
    ... // do my fancy stuff and collect
Run Code Online (Sandbox Code Playgroud)

但在其他情况下,我已经看到并行流在线程池子目录中使用,如下所示:

ForkJoinPool.commonPool().submit(() -> {
    mySet
        .parallelStream()
        ... // do my fancy stuff and collect
})
Run Code Online (Sandbox Code Playgroud)

只是调用parallelStream()执行多个并发线程中接下来的内容吗?就像在一些预配置的线程池或其他东西.或者我是否必须创建我的线程然后使用并行流?

Eug*_*ene 5

parallelStream和平运行.

通常当并行运行长流时,您不希望在其上运行该流,commonPool因为所有其他并行流也使用它.

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

ForkJoinPool pool = new ForkJoinPool(2);

pool().submit(() -> {
mySet
    .parallelStream()
    ... // do my fancy stuff and collect
})
Run Code Online (Sandbox Code Playgroud)