guava 并发_Google Guava并发– ListenableFuture
guava 并發(fā)
在上一篇文章中,我介紹了使用Guava庫中com.google.common.util.concurrent包中的Monitor類的方法。 在這篇文章中,我將繼續(xù)介紹Guava并發(fā)實用程序,并討論ListenableFuture接口。 ListenableFuture通過添加接受完成偵聽器的方法,從java.util.concurrent包擴展了Future接口。可聽的未來
ListenableFuture行為與java.util.concurrent.Future完全相同,但是具有方法addCallback(Runnable, ExecutorService)在給定的executor中執(zhí)行回調(diào)。 這是一個例子:
ListenableFuture futureTask = executorService.submit(callableTask)futureTask.addListener(new Runnable() {@Overridepublic void run() {..work after futureTask completed}}, executorService);如果在添加回調(diào)時提交的任務(wù)已完成,它將立即運行。 使用addCallback方法有一個缺點,即Runnable無法訪問future產(chǎn)生的結(jié)果。 要訪問Future的結(jié)果,您將需要使用FutureCallback 。
FutureCallback
FutureCallback接受從Future產(chǎn)生的結(jié)果,并指定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);此時,您可能會問,當(dāng)ExecutorService僅返回Futures時,如何獲取ListenableFuture實例? 答案是使用ListenableExecutionService 。
ListenableExecutionService
要使用ListenableExecutionService只需使用對MoreExecutors.listeningDecorator(ExecutorService)的調(diào)用來裝飾ExecutorService實例,例如:
ExecutorsService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());結(jié)論
借助添加回調(diào)(無論是Runnable還是處理成功和失敗條件的FutureCallback功能, ListenableFuture可能是對您的武器庫的寶貴補充。 我創(chuàng)建了一個單元測試使用證明ListenableFuture可以作為一個依據(jù) 。 在我的下一個職位,我要覆蓋Futures類,它包含與工作靜態(tài)方法futures 。
資源資源
- 番石榴項目首頁
- ListenableFuture API
- 樣例代碼
參考: Google Guava并發(fā)–來自我們的JCG合作伙伴 Bill Bejeck的《可編碼的隨機思考》博客中的ListenableFuture。
翻譯自: https://www.javacodegeeks.com/2012/11/google-guava-concurrency-listenablefuture.html
guava 并發(fā)
總結(jié)
以上是生活随笔為你收集整理的guava 并发_Google Guava并发– ListenableFuture的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双频WiFi路由器如何看真假路由器如何检
- 下一篇: Apache Lucene 7.0即将发