listenablefuture是對原有future的增強,可以用於監聽future任務的執行狀況,是執行成功還是執行失敗,並提供響應的介面用於對不同結果的處理。
適用場景:
1、如果乙個主任務開始執行,然後需要執行各個小任務,並且需要等待返回結果,統一返回給前端,此時future和listenablefuture作用幾乎差不多,都是通過get()方法阻塞等待每個任務執行完畢返回。
2、 如果乙個主任務開始執行,然後執行各個小任務,主任務不需要等待每個小任務執行完,不需要每個小任務的結果,此時用listenablefuture非常合適,它提供的futurecallback介面可以對每個任務的成功或失敗單獨做出響應。
3、如果我們希望各個小任務一旦計算完成就拿到結果展示給使用者(push出去)或者做另外的計算,就必須使用另乙個執行緒不斷的查詢計算狀態。這樣做,**複雜,而且效率低下。
public class listenfuturetest
public static void testlistenfuture()
@override
public void onfailure(throwable t)
});
system.out.println("副本任務啟動,回歸主任務線,主業務正常返回2.....");
}
}
class task implements callable
}
結果是:
主任務執行完,開始非同步執行副任務1.....
副本任務啟動,回歸主任務線,主業務正常返回2.....
成功,結果是:task done
如果把task的注釋去掉int a =1/0會丟擲異常,那麼返回會是
主任務執行完,開始非同步執行副任務1.....
副本任務啟動,回歸主任務線,主業務正常返回2.....
出錯,業務回滾或補償
由此可見,如果不採用此方法,需要另外起乙個執行緒單獨來計算狀態可計算情況,非常麻煩,用listenablefuture完美解決。
STUFF函式介紹及使用場景
stuff character expression start length character expression 引數character expression 乙個字元資料表示式。character expression 可以是常量 變數,也可以是字元列或二進位制資料列。start 乙個整數...
RabbitMQ使用場景介紹
場景說明 使用者註冊後,需要傳送郵件和註冊簡訊,傳統的方式有兩種 1 序列的方式,2 並行的方式 場景 雙十一是購物狂節,使用者下單後,訂單系統要通知庫存系統,傳統的做法就是訂單系統呼叫庫存系統的介面 這種做法有乙個缺點 當庫存系統出現故障之後,訂單系統就會失敗,訂單系統和庫存系統耦合,引入訊息佇列...
Docker元件介紹及應用場景
二 docker元件 三 docker的應用場景 四 docker的技術元件 docker是乙個能夠把開發的應用程式自動部署到容器的開源引擎。由docker 公司 www.docker.com 前 dotcloud 公司,paas市場中的老牌提供商 的團隊編寫,基於apache2.0開源授權協議發行...