【发布时间】:2020-11-10 09:01:34
【问题描述】:
我正在阅读https://dzone.com/articles/think-twice-using-java-8
介于两者之间的某个地方表明
问题是所有并行流都使用公共的fork-join线程池,如果你提交一个长时间运行的任务,你实际上阻塞了池中的所有线程。
我的问题是 - 池中的其他线程不应该在不等待长时间运行的任务的情况下完成吗?还是说我们是否并行创建两个并行流?
【问题讨论】:
-
我认为作者是说长时间运行的任务可能正在使用池中的所有线程,因此其他任务无法运行。任务不是单个可运行的,它是一个并行操作。
-
@NathanHughes 但这些线程不会来自常见的 ForkJoinPool。即使是,为什么其他线程会被阻塞在同一个池中?或者也许作者说线程将在终端操作时等待。这令人困惑!
-
ForkJoinPool用于小型任务,不适用于长时间运行的任务。如果你想创建一个长时间运行的任务(考虑到它不会消耗很多 cpu),那么在一个单独的Executor中运行.parallel()。所以是的,上述陈述是绝对正确的。
标签: multithreading java-8 java-stream forkjoinpool