【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?
thenAcceptBoth和runAfterBoth是当两个CompletableFuture都计算完成,而我们下面要懂得的办法是当随便率性一?CompletableFuture计算完成的时刻就会履行。
在Java 8中, 新增长了一个包含50个方办法右的类: CompletableFuture,默认依附fork/join框架启动新的线程实现异步与并发的,供给了异常强大年夜的Future的扩大功能,可以赞助我们简化异步编程的复杂性,供给了函数式编程的才能,可以经由过程回调的方法处理计算结不雅,并且供给了转换和组合CompletableFuture的办法。
CompletableFuture类实现了CompletionStage和Future接口,所以可以像以前一样经由过程壅塞或者轮询的方法获得结不雅,尽管这种方法不推荐应用。
创建CompletableFuture对象。
以下四个静态办法用来为一段异步履行的代码创建CompletableFuture对象:
- public static CompletableFuture<Void> runAsync(Runnable runnable)
- public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)
- public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
- public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)
runAsync办法也好懂得,它以Runnable函数式接口类型为参数,所以CompletableFuture的计算结不雅为空。以Async结尾会应用其它的线程去履行,没有指定Executor的办法会应用ForkJoinPool.commonPool()作为它的线程池履行异步代码。
supplyAsync办法以Supplier<U>函数式接口类型为参数,CompletableFuture的计算结不雅类型为U。
- CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
- return 100;
- });
- CompletableFuture<Void> f = future.thenRun(() -> System.out.println("finished"));
- System.out.println(f.get());
因为办法的参数类型都是函数式接口,所以可以应用lambda表达式实现异步义务,比如:
- CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
- //长时光的计算义务
- return "hello world";
- });
计算结不雅完成时的处理
当CompletableFuture的计算结不雅完成,或者抛出异常的时刻,我们可以履行特定的Action。主如果下面的办法:
- public CompletableFuture<T> whenComplete(BiConsumer<? super T,? super Throwable> action)
- public CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T,? super Throwable> action
推荐阅读
【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?【编辑推荐】2017 Android和iOS几回再三被曝Bug,它们都怎么了?谷歌苹不雅竟齐翻车!谈谈安卓8/iOS11那些BugiOS消息转发>>>详细阅读
地址:http://www.17bianji.com/lsqh/40058.html
1/2 1