Je regarde l'exemple classique pour RecursiveTask calculant des nombres de Fibonacci. Je glissai sortie: voir http://jboston.net/2017/FibonacciOutp.txt, le code est ci-dessousComment RecursiveTask fonctionne pour calculer les nombres de Fibonacci?
ne comprends toujours pas comment cela fonctionne, pourquoi d'abord, nous voyons tous les nombres diminuant de 12, puis de répéter plusieurs fois
= 2 fcal1.join() = 1 fcal2.compute() = 0
number = 3 fcal1.join() = 1 fcal2.compute() = 1
Le code:
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
public class RecursiveTaskDemo {
public static void main(String[] args) {
FibonacciCal fibonacciCal = new FibonacciCal(12);
ForkJoinPool pool = new ForkJoinPool();
int i = pool.invoke(fibonacciCal);
System.out.println(i);
}
}
class FibonacciCal extends RecursiveTask<Integer> {
private static final long serialVersionUID = 1L;
final int num;
FibonacciCal(int num) {
this.num = num;
}
@Override
protected Integer compute() {
if (num <= 1) {
return num;
}
System.out.println("number=" + num);
FibonacciCal fcal1 = new FibonacciCal(num - 1);
fcal1.fork();
FibonacciCal fcal2 = new FibonacciCal(num - 2);
int fcal1Join = fcal1.join();
int fcal2Compute = fcal2.compute();
System.out.println("number=" + num + " fcal1.join()=" + fcal1Join + " fcal2.compute()=" + fcal2Compute);
return fcal2Compute + fcal1Join;
}
}
Il crée un tas de processus pour calculer la série Fibonacci, mais en réalité il ne fait rien (pas de code pour le calcul) – MaxZoom