Re: [問題] 請問有辦法設定編號來決定排程嗎

作者: popcorny (畢業了..@@")   2014-11-13 22:09:59
※ 引述《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,所以每次結果會稍微不同喲!!
作者: swpoker (swpoker)   2014-11-13 22:20:00
這個解法好!看來要多研究來!!

Links booklink

Contact Us: admin [ a t ] ucptt.com