有一个框架,专门为此呼吁dexecutor(声明:我是老板)
Dexecutor是一种重量很轻的框架,以可靠的方式来执行依赖/独立的任务,要做到这一点,提供了最小的API。
- 一个API来在图形添加节点(addDependency,addIndependent,addAsDependentOnAllLeafNodes,addAsDependencyToAllInitialNodes后来两个是前两个混合版本)
- 和其他为了执行的节点。
这是最简单的例子:
DefaultDependentTasksExecutor<Integer, Integer> executor = newTaskExecutor();
executor.addDependency(1, 2);
executor.addDependency(1, 2);
executor.addDependency(1, 3);
executor.addDependency(3, 4);
executor.addDependency(3, 5);
executor.addDependency(3, 6);
//executor.addDependency(10, 2); // cycle
executor.addDependency(2, 7);
executor.addDependency(2, 9);
executor.addDependency(2, 8);
executor.addDependency(9, 10);
executor.addDependency(12, 13);
executor.addDependency(13, 4);
executor.addDependency(13, 14);
executor.addIndependent(11);
executor.execute(ExecutionBehavior.RETRY_ONCE_TERMINATING);
这里如何依赖图将被修建在
任务1,12,11将并行在这些任务运行时,一旦完成依赖任务将运行,例如,假设任务1完成,任务2和3将以类似方式运行一次任务12,完成任务13将运行等等。
看看Fork/Join? – 2011-02-06 12:32:25
我不知道任务是否重复使用其他结果。如果他们是具有预定序列的独立工作单元,那么可以通过非常简单的自定义线程池执行器来解决调度和自定义启发式问题。 – 2011-02-07 01:32:41