Fork/Join框架小示例-计算连续任意大个数之和

代码如下:

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;
	}
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值