【发布时间】:2012-11-14 11:16:50
【问题描述】:
我想使用 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() 函数(当然是在更新相关字段之后),但它似乎不起作用。
【问题讨论】:
-
你所做的与 Fork/Join 有什么关系?递归分解的整个想法是将一个大数组分解成更小的部分,以便每个部分都可以在不同的处理器上运行。这些部分称为任务。我们需要更多信息。
标签: scalability java-7 fork-join