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