Fork/Join
分治任务


Fork/Join 框架
ForkJoinTask

ForkJoinPool

案例
斐波那契数列
Last updated




Last updated
public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
public final ForkJoinTask<V> fork() {
Thread t;
if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread)
((ForkJoinWorkerThread)t).workQueue.push(this);
else
ForkJoinPool.common.externalPush(this);
return this;
}
public final V join() {
int s;
if ((s = doJoin() & DONE_MASK) != NORMAL)
reportException(s);
return getRawResult();
}
}
public abstract class RecursiveTask<V> extends ForkJoinTask<V> {
protected abstract V compute();
}
public abstract class RecursiveAction extends ForkJoinTask<Void> {
protected abstract void compute();
}public static void main(String[] args) {
System.out.println(new ForkJoinPool(4).invoke(new FibonacciTask(30)));
}
private static final class FibonacciTask extends RecursiveTask<Integer> {
private final int n;
private FibonacciTask(int n) {
this.n = n;
}
@Override
protected Integer compute() {
if (n <= 1) {
return n;
}
return new FibonacciTask(n - 1).compute() + new FibonacciTask(n - 2).fork().join();
}
}