import java.util.List;
import java.util.concurrent.RecursiveTask;
public class MyCounter extends RecursiveTask<Integer> {
private static final long serialVersionUID = 1L;
private List<Integer> list;
/**
* 开始
*/
private int first;
/**
* 结束
*/
private int last;
public MyCounter(int first, int last, List<Integer> list) {
super();
this.first = first;
this.last = last;
this.list =list;
}
@Override
protected Integer compute() {
int sum = 0;
if (last - first < 10) {
System.out.print("["+first+"-"+last+"]");
for (int i = first; i < last; i++) {
sum = sum + list.get(i);
}
} else {
int middle = (last + first)/2;
MyCounter left = new MyCounter(first, middle, list);
MyCounter right = new MyCounter(middle, last, list);
left.fork();
right.fork();
sum = left.join()+right.join();
System.out.println(sum);
}
return sum;
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;
public class MyTest {
public static void main(String[] args) throws InterruptedException,
ExecutionException {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(i);
}
System.out.println(list);
ForkJoinPool forkJoinPool = new ForkJoinPool();// 对线程池的扩展
Future<Integer> result = forkJoinPool
.submit(new MyCounter(0, 20, list));
System.out.println(result.get());
forkJoinPool.shutdown();
}
}