首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java8之前并行ForEach是可能的吗?

在Java8之前并行ForEach是可能的吗?
EN

Stack Overflow用户
提问于 2018-10-03 11:07:08
回答 2查看 108关注 0票数 2

我们都知道streams允许我们并行foreach执行,例如(实际代码并不重要):

代码语言:javascript
复制
Arrays.stream(ints).parallel()...

C#有一些类似的东西,形式如下:

代码语言:javascript
复制
ints.AsParallel().Select(int=> ....

但!它还具有以下语法,这些语法可能早于上面的语法,也可能不早于上面的语法:

代码语言:javascript
复制
Parallel.ForEach(ints, anInt => {});

这就引出了我的问题-在Java 8之前,Java有没有一种方法可以相对简单地进行并行foreach?谷歌一下似乎没有结果,我也尝试了几篇文章herehere,on Baeldung,等等,看不到更老的方法。

有吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-03 11:16:40

你可以从Java7开始,也就是在Java8之前使用Fork/Join框架进行并行处理。但您必须按自己的方式拆分数据源,并将代码包装在ForkJoinTask子类中,通常使用其更专用的类型之一,即RecursiveTask (可以返回结果)或RecursiveAction。在您的例子中,由于没有返回值,您必须将代码包装在RecursiveAction中,并将所有子任务提交到common Fork/Join池中。

票数 3
EN

Stack Overflow用户

发布于 2018-10-03 11:16:23

不完全是,但Java7添加了ForkJoinPool,它专门用于并行执行分解的子任务(较大任务的一部分)。这可以很容易地应用于Collection

Java5还添加了ThreadPoolExecutor,它不是专门用于运行分解的子任务的,但它仍然可以用于它,只需多做一点工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52619152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档