我想在 Java 中实现一个简单的类似 DAG 的调度程序(不需要结果),如下图所示:
我可以简单地使用手动代码来实现这一点:
ExecutorService executor = Executors.newCachedThreadPool();
Future<?> futureA = executor.submit(new Task("A"));
Future<?> futureC = executor.submit(new Task("C"));
futureA.get();
Future<?> futureB = executor.submit(new Task("B"));
futureB.get();
futureC.get();
Future<?> futureD = executor.submit(new Task("D"));
futureD.get();
但我正在寻找一种更通用的方法来做到这一点,所以我可以像这样使用调度程序:
Container container = new Container();
container.addTask("A", new Task("A"));
container.addTask("B", new Task("B"), "A");
container.addTask("C", new Task("C"));
container.addTask("D", new Task("D"), "B", "C");
container.waitForCompletion();
实际上我已经实现了一个简单的:
但我需要每 100 毫秒迭代一次所有任务,以查看准备提交的任务。同样在这个实现中没有异常检查。
我还检查了 Guava lib 的 ListenableFuture,但我不知道如何正确使用它。
任何有关如何实现 DAG 或推荐现有开源调度程序的建议都将不胜感激。