我想使用 Java fork join 来解决递归问题,但我不想为每个递归步骤显式创建一个新任务实例。原因是太多的任务等于太多的对象,在处理几分钟后就填满了我的记忆。
我在 Java 6 中有以下解决方案,但是 Java 7 有更好的实现吗?
final static AtomicInteger max = new AtomicInteger(10); // max parallel tasks
final static ThreadPoolExecutor executor = new ThreadPoolExecutor(....);
private void submitNewTask() {
if (max.decrementAndGet()>=0) {
executor.execute(new Task(....));
return;
}
run(); // avoid creating a new object
}
public void run() {
..... process ....
// do the recursion by calling submitNewTask()
max.incrementAndGet();
}
我尝试了invoke()
再次在同一任务上调用该函数(当然是在更新相关字段之后),但它似乎不起作用。