标签:style blog color io 使用 ar java for strong
分支/合并框架
ForkJoinPool维护一个线程池,当调用ForkJoinPool对象的invoke()方法时,将任务分发给ForkJoinTask执行。
ForkJoinTask具体是执行任务的类,一般我们使用其子类,当需要返回值时,使用RecursiveTask;不需要返回值
则使用RecursiveAction,在执行子任务的时候,执行 compute方法,注意,在调用invoke方法完成的时候会形成阻塞
,调用者后面的代码会等待invoke执行完后再执行。
--------------SplitNumCaculateSample>分步获取所有数组的和
/**
*
*
* @author Lean @date:2014-10-7
*/
public class SplitNumCaculateSample {
public static int[] num={10,50,20,100,10};
public static final int THRESHOLD=5;
public static void main(String[] args) {
ForkJoinPool pool=new ForkJoinPool(Runtime.getRuntime().availableProcessors());
pool.invoke(new SortTask(num));
}
static class SortTask extends RecursiveAction{
private static final long serialVersionUID = 1L;
private int[] mCalculateNum;
public SortTask(int[] calculateNum){
mCalculateNum=calculateNum;
}
@Override
protected void compute() {
if (mCalculateNum.length>2) {
int[] lastArray=new int[mCalculateNum.length-2];
for (int i = 2; i < mCalculateNum.length; i++) {
lastArray[i-2]=mCalculateNum[i];
}
invokeAll(new SortTask(new int[]{mCalculateNum[0],mCalculateNum[1]}),
new SortTask(lastArray));
merge(mCalculateNum);
}else {
merge(mCalculateNum);
}
}
}
private static void merge(int[] mCalculateNum){
int sum=0;
for (int i : mCalculateNum) {
sum+=i;
}
System.out.println("sum is:"+sum);
}
}
--------------
标签:style blog color io 使用 ar java for strong
原文地址:http://blog.csdn.net/qq285016127/article/details/39890811