ListenableFuture使用場景及介紹示例

2021-08-22 04:52:50 字數 1210 閱讀 4894

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開源授權協議發行...