Ho la seguente classe che gira e compila (puoi provarlo). L'unica cosa che mi lascia un po 'perplesso è che alla fine nel main funziona bene con fj.invoke (task) ma non con fj.execute (task) e fj.submit (task). Non ottengo alcun output con questi ultimi. Dall'API dovrebbe funzionare anche con gli altri metodi che eseguono l'operazione .. anche se restituiscono o meno un valore, devono comunque eseguire l'attività. Cosa mi manca qui?Differenza tra Execute, Submit e Invoke() in un 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));
}
}
Si può provare semplicemente copia e incolla il codice, sostituendo
fj.invoke(new RecursiveTaskActionThing(500));
con
fj.execute(new RecursiveTaskActionThing(500));
o con
fj.submit(new RecursiveTaskActionThing(500));
non sarà sputare qualsiasi uscita .. Mi sto chiedendo perché.
Grazie in anticipo.
Grande, grazie mille, solo una curiosità lavori con questa roba su base regolare o sei solo appassionato? – Rollerball
Intendo con il regno del multithreading – Rollerball
@Rollerball solo appassionato :) –