Guava - 并行編程Futures詳解
Guava為Java并行編程Future提供了很多有用擴(kuò)展,其主要接口為ListenableFuture,并借助于Futures靜態(tài)擴(kuò)展。
繼承至Future的ListenableFuture,允許我們添加回調(diào)函數(shù)在線程運(yùn)算完成時返回值或者方法執(zhí)行完成立即返回。
對ListenableFuture添加回調(diào)函數(shù):
Futures.addCallback(ListenableFuture<V>, FutureCallback<V>, Executor)
其中 FutureCallback是一個包含onSuccess(V),onFailure(Throwable)的接口。
使用如:
Futures.addCallback(ListenableFuture, new FutureCallback<Object>() { public void onSuccess(Object result) { System.out.printf("onSuccess with: %s%n", result); } public void onFailure(Throwable thrown) { System.out.printf("onFailure %s%n", thrown.getMessage()); } });
同時Guava中Futures對于Future擴(kuò)展還有:
- transform:對于ListenableFuture的返回值進(jìn)行轉(zhuǎn)換。
- allAsList:對多個ListenableFuture的合并,返回一個當(dāng)所有Future成功時返回多個Future返回值組成的List對象。注:當(dāng)其中一個Future失敗或者取消的時候,將會進(jìn)入失敗或者取消。
- successfulAsList:和allAsList相似,唯一差別是對于失敗或取消的Future返回值用null代替。不會進(jìn)入失敗或者取消流程。
- immediateFuture/immediateCancelledFuture: 立即返回一個待返回值的ListenableFuture。
- makeChecked: 將ListenableFuture 轉(zhuǎn)換成CheckedFuture。CheckedFuture 是一個ListenableFuture ,其中包含了多個版本的get 方法,方法聲明拋出檢查異常.這樣使得創(chuàng)建一個在執(zhí)行邏輯中可以拋出異常的Future更加容易
- JdkFutureAdapters.listenInPoolThread(future): guava同時提供了將JDK Future轉(zhuǎn)換為ListenableFuture的接口函數(shù)。
下邊是一個對于Future的測試demo:
@Test public void should_test_furture() throws Exception { ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10)); ListenableFuture future1 = service.submit(new Callable<Integer>() { public Integer call() throws InterruptedException { Thread.sleep(1000); System.out.println("call future 1."); return 1; } }); ListenableFuture future2 = service.submit(new Callable<Integer>() { public Integer call() throws InterruptedException { Thread.sleep(1000); System.out.println("call future 2."); // throw new RuntimeException("----call future 2."); return 2; } }); final ListenableFuture allFutures = Futures.allAsList(future1, future2); final ListenableFuture transform = Futures.transform(allFutures, new AsyncFunction<List<Integer>, Boolean>() { @Override public ListenableFuture apply(List<Integer> results) throws Exception { return Futures.immediateFuture(String.format("success future:%d", results.size())); } }); Futures.addCallback(transform, new FutureCallback<Object>() { public void onSuccess(Object result) { System.out.println(result.getClass()); System.out.printf("success with: %s%n", result); } public void onFailure(Throwable thrown) { System.out.printf("onFailure%s%n", thrown.getMessage()); } }); System.out.println(transform.get()); }
官方資料主頁:https://awk.so/@code.google.com!/p/guava-libraries/wiki/ListenableFutureExplained
以上就是對Guava - 并行編程Futures 的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料謝謝大家對本站的支持!
- Java基于Guava Retrying實(shí)現(xiàn)重試功能
- Springboot整合GuavaCache緩存過程解析
- Java內(nèi)存緩存工具Guava LoadingCache使用解析
- SpringBoot加入Guava Cache實(shí)現(xiàn)本地緩存代碼實(shí)例
- 詳解Guava Cache本地緩存在Spring Boot應(yīng)用中的實(shí)踐
- springboot使用GuavaCache做簡單緩存處理的方法
- RateLimit-使用guava來做接口限流代碼示例
- Java編程guava RateLimiter實(shí)例解析
- Java Guava排序器Ordering原理及代碼實(shí)例
相關(guān)文章
SpringBoot @RequestParam、@PathVaribale、@RequestBody實(shí)戰(zhàn)案例
這篇文章主要介紹了SpringBoot @RequestParam、@PathVaribale、@RequestBody實(shí)戰(zhàn)案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11啟動 Eclipse 彈出 Failed to load the JNI shared library jvm.dll
這篇文章主要介紹了有時候,新電腦上回碰到打開Eclipse時,彈出提示“Failed to load the JNI shared library jvm.dll”錯誤,這里給大家分享解決方案2016-08-08Java實(shí)現(xiàn)把兩個數(shù)組合并為一個的方法總結(jié)
這篇文章主要介紹了Java實(shí)現(xiàn)把兩個數(shù)組合并為一個的方法,結(jié)合實(shí)例形式總結(jié)分析了java常用的四種數(shù)組合并操作技巧,需要的朋友可以參考下2017-12-12Spring MVC Mybatis多數(shù)據(jù)源的使用實(shí)例解析
項(xiàng)目需要從其他網(wǎng)站獲取數(shù)據(jù),因?yàn)槭桥R時加的需求,這篇文章主要介紹了Spring MVC Mybatis多數(shù)據(jù)源的使用實(shí)例解析,需要的朋友可以參考下2016-12-12Spring中@RestControllerAdvice注解的使用詳解
這篇文章主要介紹了Spring中@RestControllerAdvice注解的使用詳解,@RestControllerAdvice是一個組合注解,由@ControllerAdvice、@ResponseBody組成,而@ControllerAdvice繼承了@Component,需要的朋友可以參考下2024-01-01