2、从网上找的一个例子,求和
public class CountTask extends RecursiveTask<Integer>
{
// 阈值,分割小任务计算求和的个数
private static final int THRESHOLD = 1000;
private int start;
private int end;
public CountTask(int start,int end)
{
this.start = start;
this.end = end;
}
@Override
protected Integer compute()
{
int sum = 0;
boolean canCompute = (end - start) <= THRESHOLD;
if (canCompute)
{
for (int i = start; i <= end; i++)
sum += i;
}
else
{
//如果任务大于阀值,就分裂成两个子任务计算
int mid = (start + end) / 2;
CountTask leftTask = new CountTask(start, mid);
CountTask rightTask = new CountTask(mid + 1, end);
//执行子任务
leftTask.fork();
rightTask.fork();
//等待子任务执行完,并得到结果
int leftResult = (int)leftTask.join();
int rightResult = (int)rightTask.join();
sum = leftResult + rightResult;
}
return sum;
}
public static void main(String[] args)
{
ForkJoinPool forkJoinPool = new ForkJoinPool();
//生成一个计算任务,负责计算从1加到 10000
CountTask task = new CountTask(1, 10000);
Future<Integer> result = forkJoinPool.submit(task);
try
{
System.out.println(result.get());
}
catch (Exception e)
{
}
}
}