package object_out;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;
public class TestCreateMultipleTasks {
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);
int i = task1.result;
int j = task2.result;
int k = task3.result;
result = i + j + k;
}
}
public int method(int num) {
if (num <= 0) {
return 0;
} else {
int i = method(num - 1);
int j = method(num - 2);
int k = method(num - 3);
return i + j + k;
}
}
}
}