看板 java 關於我們 聯絡資訊
※ 引述《PTTCATKING (懷念美國貓王)》之銘言: : 假設有二十個任務要跑 : 而他在DB裡會有兩組編號(欄位名稱) : 第一組是1~20的流水號 : 第二組是執行優先順序(記錄需等待的對象) : A 跑完 同時執行 B & CD 兩條線同時跑,而B會先跑完,但要等CD都跑完後,BCD都結束 : 才開始跑E : A的編號就是 1 0 (無等待對象) : B的編號就是 2 1 (等待A,1是A的編號) : C的編號就是 3 1 (等待A,1是A的編號) : D的編號就是 4 3 (等待C,3是C的編號) : E的編號就是 5 2 (等待B,2是B的編號) : E的編號就是 5 4 (等待D,4是D的編號) : 因為E要等兩個,所以在DB裡 E 會有兩筆資料 : 請問 有沒有什麼現有套件有能夠執行這件事情呢 : 設定那兩個編號,則程式執行後就按照兩個編號,決定程式優先順序,並有可能同時執行 : 多程序 : 以後維護就是設定編號就能決定跑程式的優先順序 : 今天用CountDownLatch寫出類似的東西,被認為是寫死的東西orz : 這是用排程器???或是什麼方向呢?? @O@ : 能否有高手指點明燈給我方向,謝謝 T_T 可以用java8的CompletableFuture啊 class MyTask implements Runnable { private String name; public MyTask(String name) { this.name = name; } public void run() { try { System.out.printf("Task %s\n", name); Thread.sleep((long) (new Random().nextDouble() * 1000)); System.out.printf("Task %s complete\n", name); } catch (Exception e){} } } public class Scheduler { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService executor = Executors.newFixedThreadPool(3); CompletableFuture<Void> a = CompletableFuture .allOf() .thenRunAsync(new MyTask("a"), executor); CompletableFuture<Void> b = CompletableFuture .allOf(a) .thenRunAsync(new MyTask("b"), executor); CompletableFuture<Void> c = CompletableFuture .allOf(a) .thenRunAsync(new MyTask("c"), executor); CompletableFuture<Void> d = CompletableFuture .allOf(c) .thenRunAsync(new MyTask("d"), executor); CompletableFuture<Void> e = CompletableFuture .allOf(b, d) .thenRunAsync(new MyTask("e"), executor); CompletableFuture<Void> all = CompletableFuture .allOf(a,b,c,d,e); all.get(); System.out.print("Complete"); executor.shutdown(); } } 出來結果 Task a Task a complete Task c Task b Task b complete Task c complete Task d Task d complete Task e Task e complete Complete 因為用random sleep,所以每次結果會稍微不同喲!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.17.146 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1415887801.A.14C.html ※ 編輯: popcorny (1.171.17.146), 11/13/2014 22:20:38
swpoker: 這個解法好!看來要多研究來!! 11/13 22:20
swpoker: 不過原PO是要解資料結構阿~ 11/17 09:51