
Originariamente inviata da
kuarl
al di la del fatto che quando vedo campi e metodi senza un modificatore di visibilità provo la stessa sensazione di unghiate sopra la lavagna, io fare così:
codice:
public void parallelizzaEdEsegui(Collection<? extends RecursiveTask<Double>> tasks) {
ForkJoinPool fjp = new ForkJoinPool();
for(RecursiveTask<Double> t : tasks)
fjp.invoke(t);
}
le tue classi (... e anche qui sorvolo) che eseguono conti estendono tutte RecursiveTask. Quindi puoi instanziarle, infilarle in una collection qualsiasi (lista, mappa, set o che ne sò) e darla in pasto a questo metodo...
edit:
alternativamente, usando varargs:
codice:
public void parallelizzaEdEsegui(RecursiveTask<Double>... tasks) {
ForkJoinPool fjp = new ForkJoinPool();
for(RecursiveTask<Double> t : tasks)
fjp.invoke(t);
}
come prima ma invece di buttare tutto in una collection devi fare una roba tipo:
codice:
parallelizzaEdEsegui(new Sum(nums,0, nums.length), new Sum(nums,1, nums.length), ... );
ovvero darle come parametro alla funzione quante volte vuoi...