天天看點

Guava并發:ListenableFuture與RateLimiter示例概念代碼示例Guava版本

        listenablefuture顧名思義就是可以監聽的future,它是對java原生future的擴充增強。我們知道future表示一個異步計算任務,當任務完成時可以得到計算結果。如果我們希望一旦計算完成就拿到結果展示給使用者或者做另外的計算,就必須使用另一個線程不斷的查詢計算狀态。這樣做,代碼複雜,而且效率低下。使用listenablefuture guava幫我們檢測future是否完成了,如果完成就自動調用回調函數,這樣可以減少并發程式的複雜度。      

        推薦使用第二種方法,因為第二種方法可以直接得到future的傳回值,或者處理錯誤情況。本質上第二種方法是通過調動第一種方法實作的,做了進一步的封裝。

另外listenablefuture還有其他幾種内置實作:

settablefuture:不需要實作一個方法來計算傳回值,而隻需要傳回一個固定值來做為傳回值,可以通過程式設定此future的傳回值或者異常資訊

checkedfuture: 這是一個繼承自listenablefuture接口,他提供了checkedget()方法,此方法在future執行發生異常時,可以抛出指定類型的異常。

    ratelimiter類似于jdk的信号量semphore,他用來限制對資源并發通路的線程數,本文介紹ratelimiter使用