我希望在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库的ListenableFuture,但我不知道如何正确使用它。
如果您有关于如何实现DAG或推荐现有开源调度程序的建议,将不胜感激。
A
、B
和C
,然后等待它们完成,为什么不使用invokeAll
呢? - Boris the SpiderB
依赖于A
,且可能存在更复杂的图形。 - Jerry