工做中出現某些代碼須要並行執行以提升程序運算速度的狀況,因此寫了一個小工具。git
public class Main { public static void main(String[] args) { // 你能夠經過註釋下面的部分代碼來探索它的功能, // 一些重要的說明請到代碼中尋找,註釋寫的很清楚 new ParallelInvoker().call(invoker -> { // call方法啓動執行器 System.out.println("1"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } invoker.reject(new Exception("e1")); System.out.println("2"); }).and(invoker -> { System.out.println("3"); invoker.reject(new Exception("e2")); System.out.println("4"); }).then(invoker -> { // then將先後斷開,只有前面的回調所有執行完,且沒有發生catched(沒有調用reject),纔會執行then後的函數,此處調用了reject,因此"then 開始"不會被打印 System.out.println("then 開始"); invoker.reject(new Exception()); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("then 結束"); }).continued().catched(e -> { // continued標識可以讓主線程不等待被標記點的執行 System.out.println(e.getMessage()); }).start(); System.out.println("main continue"); } }
結果:github
1 3 e2 4 main continue 2
項目在GitHub上,點這裏函數