Ich habe die folgende Klasse, die läuft und kompiliert (Sie können es ausprobieren). Das einzige, was mich etwas verwirrt, ist, dass es am Ende im großen und ganzen mit fj.invoke (Aufgabe) funktioniert, aber nicht mit fj.execute (task) und fj.submit (task). Ich bekomme mit den letzteren keine Ausgabe. Von der API sollte es auch mit den anderen Methoden arbeiten, sie führen die Aufgabe aus. Selbst wenn sie entweder einen Wert zurückgeben oder nicht, sollten sie die Aufgabe noch ausführen. Was fehlt mir hier?Unterschied zwischen Execute, Submit und Invoke() in einem ForkJoinPool
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));
}
}
Sie können es einfach kopieren ausprobieren und fügen Sie den Code, durch
fj.invoke(new RecursiveTaskActionThing(500));
mit
fj.execute(new RecursiveTaskActionThing(500));
oder mit
fj.submit(new RecursiveTaskActionThing(500));
ersetzt ausspucken es wird keine Ausgabe .. Ich frage mich warum.
Vielen Dank im Voraus.
Toll, vielen Dank, nur eine Neugier arbeitest du regelmäßig mit diesem Zeug oder bist du nur leidenschaftlich? – Rollerball
Ich meine mit dem Multithreading-Realm – Rollerball
@Rollerball nur leidenschaftlich :) –