学习java7的fork/join

在网上看到一个列子,顺便敲了一边,练练手

* ForkJoinPool是一个Excutor的子类
* ForkJoinTask:我们要使用ForkJoin框架,必须首先创建一个ForkJoin任务。它提供在任务中执行fork()和join()操作的机制,通常情况下我们不需要直接继承ForkJoinTask类,而只需要继承它的子类,Fork/Join框架提供了以下两个子类:
RecursiveAction:用于没有返回结果的任务。
RecursiveTask :用于有返回结果的任务。

class CountTask extends RecursiveTask<Integer>{
private int THRESHOLD = 2;
private int start ;
private int end;

CountTask(int start,int end){
this.start = start;
this.end = end;
}

@Override
protected Integer compute() {
int sum = 0;
boolean canFork = end-start>THRESHOLD;
if(!canFork){
for(int i=start;i<=end;i++){
sum += i;
}
}else{
int middle = (end-start)/2;
CountTask task1 = new CountTask(start,middle);
CountTask task2 = new CountTask(middle+1,end);
task1.fork();
task2.fork();
sum = task1.join() + task1.join();
/**
* getException方法返回Throwable对象,
* 如果任务被取消了则返回CancellationException。
* 如果任务没有完成或者没有抛出异常则返回null
*/
if(task1.isCompletedAbnormally())
{
System.out.println(task1.getException());
}
if(task2.isCompletedAbnormally())
{
System.out.println(task2.getException());
}
}
return sum;
}

public static void main(String[] args){
CountTask task = new CountTask(1,10000);
ForkJoinPool pool = new ForkJoinPool();
Future<Integer> sum = pool.submit(task);
println(sum.get());
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值