我有一个递归分治算法,在开始划分之前需要两个计算密集型的基本案例任务。最初的基本案例是独立的任务,所以我想并行执行它们。在基本情况之后,分割运行相同的任务,不同的输入在 0 和 1 之间,并根据输出决定是否再次分割。我通过创建一个伪造递归的任务包装对象来使基本案例工作,但这感觉就像一个杂物,如下所示:
public static void doSomething () {
ForkJoinPool pool = new ForkJoinPool();
private ArrayList<Object> al = new ArrayList<Object>();
TaskWrapper tw = new TaskWrapper(true,-1);
al.addAll(pool.invoke(tw));
}
@SuppressWarnings("serial")
public static class TaskWrapper extends RecursiveTask<ArrayList<Object>> {
private ArrayList<Object> al = new ArrayList<Object>();
private boolean arg;
private double input;
private Object out;
TaskWrapper(boolean ar, double in){
arg = ar;
input = in;
}
@Override
public ArrayList<Object> compute() {
if (arg == false) {
out = new Object(runIntensiveTask(input));
al.add(out);
}
else {
// Right Base Case
TaskWrapper right = new TaskWrapper(false, 1);
right.fork();
// Left Base Case
TaskWrapper left = new TaskWrapper(false, 0);
al.addAll(left.compute());
// Join with Right result
al.addAll(right.join());
}
return al;
}
}
有没有更简单的方法来完成同样的事情?
这是我的第一篇 StackOverflow 帖子,所以请原谅任何格式或协议错误。感谢您的帮助。