Google Guava并发– ListenableFuture
可聽的未來
ListenableFuture行為與java.util.concurrent.Future完全相同,但是具有方法addCallback(Runnable, ExecutorService)在給定的executor中執行回調。 這是一個例子:
ListenableFuture futureTask = executorService.submit(callableTask)futureTask.addListener(new Runnable() {@Overridepublic void run() {..work after futureTask completed}}, executorService);如果您在添加回調時提交的任務已完成,它將立即運行。 使用addCallback方法有一個缺點,即Runnable無法訪問future產生的結果。 要訪問Future的結果,您需要使用FutureCallback 。
FutureCallback
FutureCallback接受從Future產生的結果,并指定onSuccess和onFailure方法。 這是一個例子:
class FutureCallbackImpl implements FutureCallback<String> {@Overridepublic void onSuccess(String result){.. work with result}@Overridepublic void onFailure(Throwable t) {... handle exception}}通過使用Futures類中的addCallback方法來附加FutureCallback :
Futures.addCallback(futureTask, futureCallbackImpl);此時,您可能會問,當ExecutorService僅返回Futures時,如何獲取ListenableFuture實例? 答案是使用ListenableExecutionService 。
ListenableExecutionService
要使用ListenableExecutionService只需使用對MoreExecutors.listeningDecorator(ExecutorService)的調用來裝飾ExecutorService實例,例如:
ExecutorsService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());結論
借助添加回調(無論是Runnable還是處理成功和失敗條件的FutureCallback功能, ListenableFuture可能會成為您的武器庫的寶貴補充。 我創建了一個單元測試使用證明ListenableFuture可以作為一個依據 。 在我的下一個職位,我要覆蓋Futures類,它包含與工作靜態方法futures 。
資源資源
- 番石榴項目首頁
- ListenableFuture API
- 樣例代碼
參考: Google Guava并發–我們的JCG合作伙伴 Bill Bejeck的《可編碼的隨機想法》博客中的ListenableFuture。
翻譯自: https://www.javacodegeeks.com/2012/11/google-guava-concurrency-listenablefuture.html
總結
以上是生活随笔為你收集整理的Google Guava并发– ListenableFuture的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洗衣液凝珠的使用方法 洗衣液凝珠的使用方
- 下一篇: Google Guava –与Monit