代码如下:
import java.math.BigInteger;
import java.util.concurrent.ForkJoinPool;
public class App {
public static void main(String[] args) throws Exception {
ForkJoinPool pool = new ForkJoinPool();
BigInteger b = new BigInteger("0");
BigInteger e = new BigInteger("10000000");
B t = new B(b, e);
pool.execute(t);
System.out.println(t.get());
}
}
任务划分:
import java.math.BigInteger;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;
public class B extends RecursiveTask<BigInteger> {
private final static BigInteger threhold = new BigInteger("1000");
private final static BigInteger TWO = new BigInteger("2");
private BigInteger begin, end;
public B(BigInteger begin, BigInteger end) {
this.begin = begin;
this.end = end;
}
@Override
protected BigInteger compute() {
// TODO Auto-generated method stub
if (end.subtract(begin).compareTo(threhold) > 0) {
ForkJoinTask<BigInteger> t1=new B(begin, begin.add(end.subtract(begin).divide(TWO).add(end.subtract(begin).remainder(TWO)))).fork();
ForkJoinTask<BigInteger> t2=new B(begin.add(end.subtract(begin).divide(TWO).add(end.subtract(begin).remainder(TWO))).add(BigInteger.ONE), end).fork();
return t1.join().add(t2.join());
} else {
BigInteger s = new BigInteger("0");
BigInteger b=begin;
while (b.compareTo(end) <= 0) {
s=s.add(b);
b = b.add(new BigInteger("1"));
}
return s;
}
}
}