有一个专门用于此目的的框架,称为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 将运行等等.