【发布时间】:2020-08-29 03:22:35
【问题描述】:
参考Java's Fork/Join vs ExecutorService - when to use which?,通常使用传统的线程池来处理很多独立的请求; ForkJoinPool 用于处理连贯/递归任务,其中一个任务可能会产生另一个子任务并稍后加入。
那么,为什么 Java-8 的 parallelStream 默认使用 ForkJoinPool 而不是传统的执行器?
在很多情况下,我们在stream() 或parallelStream() 之后使用forEach(),然后提交一个函数式接口作为参数。在我看来,这些任务是独立的,不是吗?
【问题讨论】:
-
forEach是十几个终端操作中的一个。即使您“在许多情况下”使用它,它也肯定不会驱动仍然必须支持所有这些的软件的设计决策。除此之外,我认为forEach是最没用的终端操作,它经常导致开发人员编写损坏的“用另一个名字循环”代码。
标签: concurrency parallel-processing java-stream threadpool forkjoinpool