package cn.temp.temp;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
// F:\myeclipseWorker\temp\bin\cn\temp\temp
// java -classpath .; cn.temp.temp.Temp
// java -classpath . cn.temp.temp.Temp
public class Temp {
public static void main(String[] args) throws Exception {
long start;
int count = 20;
start = System.currentTimeMillis();
int value = a(count);
System.out.println(value);
System.out.println("用时:" + (System.currentTimeMillis() - start) + " ms");
start = System.currentTimeMillis();
ForkJoinPool pool = new ForkJoinPool();
Task task = new Task(count);
pool.invoke(task);
System.out.println(task.getRawResult());
System.out.println("用时:" + (System.currentTimeMillis() - start) + " ms");
}
public static int a(int j) {
if (j <= 2)
return 1;
return a(j - 2) + a(j - 1);
}
}
@SuppressWarnings("serial")
class Task extends RecursiveTask<Integer> {
int i;
Task(int i) {
super();
this.i = i;
}
@Override
protected Integer compute() {
if (i <= 2)
return 1;
Task t1 = new Task(i - 1);
Task t2 = new Task(i - 2);
invokeAll(t1, t2);
return t1.getRawResult() + t2.getRawResult();
}
}