我们都知道streams允许我们并行foreach执行,例如(实际代码并不重要):
Arrays.stream(ints).parallel()...
C#有一些类似的东西,形式如下:
ints.AsParallel().Select(int=> ....
但!它还具有以下语法,这些语法可能早于上面的语法,也可能不早于上面的语法:
Parallel.ForEach(ints, anInt => {});
这就引出了我的问题-在Java 8之前,Java有没有一种方法可以相对简单地进行并行foreach?谷歌一下似乎没有结果,我也尝试了几篇文章here,here,on Baeldung,等等,看不到更老的方法。
有吗?
发布于 2018-10-03 11:16:40
你可以从Java7开始,也就是在Java8之前使用Fork/Join框架进行并行处理。但您必须按自己的方式拆分数据源,并将代码包装在ForkJoinTask
子类中,通常使用其更专用的类型之一,即RecursiveTask
(可以返回结果)或RecursiveAction
。在您的例子中,由于没有返回值,您必须将代码包装在RecursiveAction
中,并将所有子任务提交到common Fork/Join池中。
发布于 2018-10-03 11:16:23
不完全是,但Java7添加了ForkJoinPool,它专门用于并行执行分解的子任务(较大任务的一部分)。这可以很容易地应用于Collection
。
Java5还添加了ThreadPoolExecutor,它不是专门用于运行分解的子任务的,但它仍然可以用于它,只需多做一点工作。
https://stackoverflow.com/questions/52619152
复制相似问题