问题 Java 8 Stream多线程


mylist.stream()
      .filter(m -> m.isokay() != null)
      .forEach(m -> m.dosomething()));

对于此代码,它是否在多个线程上运行? 如果没有,我该怎么办?我想要每个人 m.dosomething() 运行单独的线程来加快这项工作。


4453
2017-10-16 20:27


起源

我想你在找 parallelStream()。 - Tunaki
据透露, .parallelStream() 将利用 ForkJoinPool.commonPool()。 - Solomon Slow
请注意,在许多情况下,多线程可能会降低代码速度。参见例如 这一页 由溪流的一位作者撰写。 - Louis Wasserman


答案:


使用 parallelStream() 实现这一目标。请注意,文档说它“可能是并行的”,因此您可能会返回非并行流。我想这些案例很少见,但要注意它实际上是一个限制。

mylist.parallelStream()
      .filter(m -> m.isokay() != null)
      .forEach(m -> m.dosomething()));

14