私は以下のクラスを実行してコンパイルしています(あなたが試してみることができます)。私が少し困惑するのは、メインの最後ではfj.invoke(タスク)でうまく動作しますが、fj.execute(タスク)とfj.submit(タスク)では機能しません。私は後者のものでは何の出力も得られません。 APIからは、他のメソッドと一緒に作業する必要があります。タスクを実行する必要がある場合でも、値を返すかどうかに関係なく、タスクを実行します。 私はここで何が欠けていますか?ForkJoinPoolのExecute、Submit、Invoke()の違い
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.execute(new RecursiveTaskActionThing(500));
またはそれは任意の出力を吐き出すません
fj.submit(new RecursiveTaskActionThing(500));
で
fj.invoke(new RecursiveTaskActionThing(500));
を交換することにより、コードを貼り付けます。..なぜ私は不思議に思っています。
ありがとうございます。
大変感謝しています。ただの好奇心で、定期的にこのようなことをしていますか、それともあなたは情熱的ですか? – Rollerball
私はマルチスレッドの領域を意味します – Rollerball
@Rollerballただ情熱:) –