invokeAll 可以在 RecursiveTask 中使用吗?
Can invokeAll be used within a RecursiveTask?
我已阅读以下代码:
invokeAll(a2, a1);
相当于:
a2.compute();
a1.join();
在 Fork-Join 的 RecursiveAction 中。
但是,由于 RecursiveTask return 是一个值,我们可能有类似的东西:
Integer result1 = t2.compute();
Integer result2 = t1.join();
然后我们应该合并 result1 和 result2 以产生最终结果。
现在,我的疑惑是:
可以将 invokedAll 用于 RecursiveTasks 吗?
如果是这样,invokeAll调用的结果如何合并到return
最终结果?
将invokeAll
method can be used for RecursiveTask
s. It takes two ForkJoinTask
作为参数,因为RecursiveTask
扩展了ForkJoinTask
,所以一个RecursiveTask
可以作为一个ForkJoinTask
.
至于获得结果,invokeAll
没有 return 任何东西,因此您不会以这种方式获得信息。您可以做的是在每个 RecursiveTask
上调用 join
方法。因为您知道在 invokeAll
return 秒时两个任务都已完成,所以 join
方法将很快 return。
invokeAll(t1, t2);
Integer result1 = t1.join();
Integer result2 = t2.join();
然而,在这一点上,你还不如做你最初做的事情,调用 compute
和 join
。当您只有两个任务并且需要它们的两个结果时,使用 invokeAll
有点笨拙。
我已阅读以下代码:
invokeAll(a2, a1);
相当于:
a2.compute();
a1.join();
在 Fork-Join 的 RecursiveAction 中。
但是,由于 RecursiveTask return 是一个值,我们可能有类似的东西:
Integer result1 = t2.compute();
Integer result2 = t1.join();
然后我们应该合并 result1 和 result2 以产生最终结果。
现在,我的疑惑是:
可以将 invokedAll 用于 RecursiveTasks 吗?
如果是这样,invokeAll调用的结果如何合并到return 最终结果?
将invokeAll
method can be used for RecursiveTask
s. It takes two ForkJoinTask
作为参数,因为RecursiveTask
扩展了ForkJoinTask
,所以一个RecursiveTask
可以作为一个ForkJoinTask
.
至于获得结果,invokeAll
没有 return 任何东西,因此您不会以这种方式获得信息。您可以做的是在每个 RecursiveTask
上调用 join
方法。因为您知道在 invokeAll
return 秒时两个任务都已完成,所以 join
方法将很快 return。
invokeAll(t1, t2);
Integer result1 = t1.join();
Integer result2 = t2.join();
然而,在这一点上,你还不如做你最初做的事情,调用 compute
和 join
。当您只有两个任务并且需要它们的两个结果时,使用 invokeAll
有点笨拙。