java - 可以在 RecursiveTask 中使用 invokeAll 吗?
问题描述
我已阅读以下代码:
invokeAll(a2, a1);
相当于:
a2.compute();
a1.join();
在 Fork-Join 的 RecursiveAction 中。
然而,由于 RecursiveTask 返回一个值,我们可能有类似的东西:
Integer result1 = t2.compute();
Integer result2 = t1.join();
然后我们应该合并 result1 和 result2 以产生最终结果。
现在,我的疑问是:
可以将 invokedAll 用于 RecursiveTasks 吗?
如果是这样,如何合并 invokeAll 调用的结果以返回最终结果?
解决方案
该invokeAll
方法可用于RecursiveTask
s。它需要两个ForkJoinTask
s 作为参数,并且因为RecursiveTask
extends ForkJoinTask
,所以 aRecursiveTask
可以用作 a ForkJoinTask
。
至于获取结果,invokeAll
不返回任何内容,因此您不会以这种方式获取信息。您可以做的是在您的每个sjoin
上调用该方法。RecursiveTask
因为您知道invokeAll
返回时两个任务都已完成,所以该join
方法将很快返回。
invokeAll(t1, t2);
Integer result1 = t1.join();
Integer result2 = t2.join();
但是,此时,您不妨只做您最初正在做的事情,调用compute
and join
。当您只有两个任务并且需要它们的两个结果时,使用invokeAll
有点笨拙。
推荐阅读
- windows - 如何在 Windows 上使用命令提示符获取 .exe 文件的内存大小
- python - 在 anaconda 中设置虚拟环境失败
- c - Atmel 工作室无法将 char 数组作为字符串发送
- excel - ¿ 如何从打开的 excel 中复制和粘贴信息?
- asp.net-mvc - IIS 7 - 部署 web 项目后,一些 css 和 js 文件给出 403 错误
- php - 更快地运行 openssl 加密功能
- c# - 带有继承类的 C#/WCF 中的 XML 序列化错误
- android - 仅将 Firebase 分析重新路由到另一个帐户
- java - Java 持久异常
- jquery - $(...).tabOverride 在使用 tabOverride jquery api 时不是一个函数