java求累加值_Java如何快速计算百亿数值的累加

可以利用Java 1.8 新特性操作

public class ForkJoinCalculate extends RecursiveTask {

private long start;

private long end;

private static final long THRESHOLD= 10000L;

public ForkJoinCalculate(long start, long end) {

this.start = start;

this.end = end;

}

@Override

protected Long compute() {

long length = end-start;

if(length<=THRESHOLD)

{

long sum = 0;

for(long i = start ;i<=end ;i++)

{

sum+=i;

}

return sum;

}else{

long middle = (start+end)/2;

ForkJoinCalculate left = new ForkJoinCalculate(start,middle);

left.fork();//拆分子任务 ,同时压入线程队列

ForkJoinCalculate right = new ForkJoinCalculate(middle+1,length);

right.fork();

return left.join()+right.join();

}

}

}

现在开始测试

public class ForkJoinTest {

@Test

public void test(){

Instant start = now();

ForkJoinPool pool = new ForkJoinPool();

ForkJoinTask task = new ForkJoinCalculate(0,1000000000L);

Long sum = pool.invoke(task);

Instant end = now();

System.out.println("执行时间:"+ Duration.between(start,end).toMillis()+"毫秒 执行结果:"+sum);

}

}

执行时间

989962ceee37c927c166b03c41e55e2d.png

标签:ForkJoinCalculate,end,百亿,long,累加,start,private,Java,public

来源: https://blog.csdn.net/qq_42506755/article/details/95358499

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值