备用:
fork/join的用法
import java.util.concurrent.*;
/**
* Created by zhouzhenyong on 16/11/23.
*/
public class baseMain {
public static void main(String[]ar) throws ExecutionException, InterruptedException {
CountTask count = new CountTask(1,100);
ForkJoinPool forkJoinPool = new ForkJoinPool();
Future<Integer> result = forkJoinPool.submit(count);
System.out.println(result.get());
}
}
class CountTask extends RecursiveTask<Integer>{
private final int THREADRANGE = 4;//这个是对当前的处理的一个阈值处理
private int sum;
private int start;
private int end;
public CountTask(int start , int end){
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
boolean rangflag = (end - start) < THREADRANGE;
if(rangflag){
for(int i =start;i<=end;i++){//这里是具体的处理数据的地方
sum+=i;
}
}else{
int middle = (start+end)/2;
CountTask task1 = new CountTask(start,middle);
CountTask task2 = new CountTask(middle+1,end);
task1.fork();
task2.fork();
sum += task1.join();
sum += task2.join();
}
return sum;
}
}