ForkJoinPool 中的 Execute 、 Submit 和 Invoke() 之间的区别
2022-09-03 01:20:15
我有以下运行和编译的类(你可以尝试一下)。唯一让我有点困惑的是,在主要的最后,它与fj.invoke(task)一起工作得很好,但它与fj.execute(task)和fj.submit(task)没有。我没有得到任何输出与后者。从API开始,它应该与其他方法一起使用,它们也执行任务。即使它们返回或不返回值,它们仍应执行任务。我在这里错过了什么?
import java.util.concurrent.RecursiveAction;
import java.util.concurrent.ForkJoinPool;
public class RecursiveTaskActionThing extends RecursiveAction{
int roba;
static int counter;
public RecursiveTaskActionThing(int roba)
{
this.roba = roba;
}
public void compute()
{
if (roba<100)
{
System.out.println("The thing has been split as expected: "+ ++counter );
}
else{
roba = roba/2;
RecursiveTaskActionThing rc1 = new RecursiveTaskActionThing(roba);
RecursiveTaskActionThing rc2 = new RecursiveTaskActionThing(roba);
this.invokeAll(rc1,rc2);
}
}
public static void main (String []args)
{
ForkJoinPool fj = new ForkJoinPool();
fj.invoke(new RecursiveTaskActionThing(500));
}
}
您只需复制并粘贴代码即可尝试一下,方法是替换
fj.invoke(new RecursiveTaskActionThing(500));
跟
fj.execute(new RecursiveTaskActionThing(500));
或与
fj.submit(new RecursiveTaskActionThing(500));
它不会吐出任何输出...我想知道为什么。
提前致谢。