我想在Java中實現一個簡單的DAG狀調度(不需要結果),被描述爲下面的圖:如何在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();
一ND其實我已經實現一個簡單的一個:
但我需要遍歷所有的任務,每100ms,看看哪一個是準備提交。在這個實現中也沒有異常檢查。
我也檢出Guava lib的ListenableFuture,但我不知道如何正確使用它。
有關如何實施DAG或推薦現有開源調度程序的任何建議,敬請期待。
我只是想同時運行任務'A','B'和'C',然後等待他們完成爲什麼不使用'invokeAll'。 –
@BoristheSpider'B'依賴於'A',並且可能有更復雜的圖。 –
這是一個非線性管道。查找管道模式,有幾個實現它的java庫。 – tom