package object_out;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;
public class TestMethodMultipleTasks {
public int method(int num) {
int processorCount = Runtime.getRuntime().availableProcessors();
ForkJoinPool pool = new ForkJoinPool(processorCount);
MethodImpl aMethodImpl = new MethodImpl(num);
pool.invoke(aMethodImpl);
return aMethodImpl.result;
}
public class MethodImpl extends RecursiveAction {
private int num;
private int result;
private MethodImpl(int num) {
this.num = num;
}
protected void compute() {
if ((num < 10)) {
result = method(num);
return;
} else {
MethodImpl task1 = new MethodImpl(num - 1);
MethodImpl task2 = new MethodImpl(num - 2);
MethodImpl task3 = new MethodImpl(num - 3);
invokeAll(task1, task2, task3);
result = sum(task1.result, task2.result, task3.result);
}
}
public int method(int num) {
if (num <= 0) {
return 0;
} else {
return sum(method(num - 1), method(num - 2), method(num - 3));
}
}
}
public int sum(int a, int b, int c) {
return a + b + c;
}
}