package object_out;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;
public class TestFibonacci {
public int fibonacci(int end) {
int processorCount = Runtime.getRuntime().availableProcessors();
ForkJoinPool pool = new ForkJoinPool(processorCount);
FibonacciImpl aFibonacciImpl = new FibonacciImpl(end);
pool.invoke(aFibonacciImpl);
return aFibonacciImpl.result;
}
public class FibonacciImpl extends RecursiveAction {
private int end;
private int result;
private FibonacciImpl(int end) {
this.end = end;
}
protected void compute() {
if ((end < 10)) {
result = fibonacci(end);
return;
} else {
FibonacciImpl task1 = new FibonacciImpl(end - 1);
FibonacciImpl task2 = new FibonacciImpl(end - 2);
invokeAll(task1, task2);
result = task1.result + task2.result;
}
}
public int fibonacci(int end) {
if (end < 2) {
return end;
} else {
return fibonacci(end - 1) + fibonacci(end - 2);
}
}
}
}