exceptionally办法返回一个新的CompletableFuture,当原始的CompletableFuture抛出异常的时刻,就会触发这个CompletableFuture的计算,调用function计算值,不然如不雅原始的CompletableFuture正常计算完后,这个新的CompletableFuture也计算完成,它的值和原始的CompletableFuture的计算的值雷同。也就是这个exceptionally办法用来处理异常的情况。
结不雅转换
因为回调风格的实现,我们不必因为等待一个计算完成而壅塞着调用线程,而是告诉CompletableFuture当计算完成的时刻请履行某个function。并且我们还可以将这些操作串联起来,或者将CompletableFuture组合起来。
- public <U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)
- public <U> CompletableFuture<U> thenApplyAsync(Function<? super T,? extends U> fn)
- public <U> CompletableFuture<U> thenApplyAsync(Function<? super T,? extends U> fn, Executor executor)
这一组函数的功能是当本来的CompletableFuture计算完后,将结不雅传递给函数fn,将fn的结不雅作为新的CompletableFuture计算结不雅。是以它的功能相当于将CompletableFuture<T>转换成CompletableFuture<U>。
- CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
- return 100;
- });
- CompletableFuture<String> f = future.thenApplyAsync(i -> i * 10).thenApply(i -> i.toString());
- System.out.println(f.get()); //"1000"
须要留意的是,这些转换并不是立时履行的,也不会壅塞,而是在前一个stage完成后持续履行。
下面一组办法固然也返回CompletableFuture对象,然则对象的值和本来的CompletableFuture计算的值不合。当本来的CompletableFuture的值计算完成或者抛出异常的时刻,会触发这个CompletableFuture对象的计算,结不雅由BiFunction参数计算而得。是以这组办法兼有whenComplete和转换的两个功能。
- public <U> CompletableFuture<U> handle(BiFunction<? super T,Throwable,? extends U> fn)
- public <U> CompletableFuture<U> handleAsync(BiFunction<? super T,Throwable,? extends U> fn)
- public <U> CompletableFuture<U> handleAsync(BiFunction<? super T,Throwable,? extends U> fn, Executor executor)
帮助办法 allOf 和 anyOf
推荐阅读 【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?【编辑推荐】2017 Android和iOS几回再三被曝Bug,它们都怎么了?谷歌苹不雅竟齐翻车!谈谈安卓8/iOS11那些BugiOS消息转发>>>详细阅读 地址:http://www.17bianji.com/lsqh/40058.html 1/2 1

网友点评
精彩导读
科技快报
品牌展示