我在互联网上看到了很多示例,为了使用流API进行并行处理,只需调用.parallelStream()
方法,如下所示:
mySet
.parallelStream()
... // do my fancy stuff and collect
但是在其他情况下,我看到在线程池提交中使用了并行流,就像这样:
ForkJoinPool.commonPool().submit(() -> {
mySet
.parallelStream()
... // do my fancy stuff and collect
})
仅调用parallelStream()
会执行多个并发线程中接下来执行的操作吗?就像在一些预配置的线程池中一样。还是我必须先创建线程,然后使用并行流?
答案 0 :(得分:5)
是的parallelStream
是并行运行的事物。
通常,当并行运行的流很长时,您不想在commonPool
上运行它,因为所有 other 并行流也都在使用它。
这是实现细节,因为流没有指定它们将用于并行处理的池,但是在当前实现下,您不应该使用ForkJoinPool.commonPool()
,而是创建一个新池:
ForkJoinPool pool = new ForkJoinPool(2);
pool().submit(() -> {
mySet
.parallelStream()
... // do my fancy stuff and collect
})