有一個框架,專門爲此呼籲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