ForkJoinPool 使用
public class CalculateTaskTest {
public List<Test1> parallelGetTest1S(List<Test2> params) throws ExecutionException, InterruptedException {
ForkJoinPool pool = new ForkJoinPool(10);
ForkJoinTask<List<Test1>> submit = pool.submit(new CalculateTask(params));
List<Test1> Test1 = submit.get();
return Test1;
}
private class CalculateTask extends RecursiveTask<List<Test1>> {
private List<Test2> params;
public CalculateTask(List<Test2> params) {
this.params = params;
}
@Override
protected List<Test1> compute() {
List<Test1> Test1S = new ArrayList<>();
if (params.size() <= 200) {
return Test1S;
}
List<List<Test2>> partition = Lists.partition(params, 200);
ArrayList<CalculateTask> tasks = Lists.newArrayList();
for (List<Test2> item : partition) {
tasks.add(new CalculateTask(item));
}
invokeAll(tasks);
for (CalculateTask task : tasks) {
Test1S.addAll(task.join());
}
return Test1S;
}
}
}