CompletionStage 说明
所属分类 java
浏览量 281
public class CompletableFuture< T > implements Future< T >, CompletionStage< T >
Future 在 Java8之前仅支持两种用法
检查 future 是否已经完成,
等待 future 完成;
Java8 增加了 CompletableFuture , 实现了 CompletionStage 接口,并对 Future 进行了扩展。
CompletionStage 代表异步计算中的一个阶段或步骤。
该接口定义了多种不同的方式,将CompletionStage 实例与其他实例或代码链接在一起,比如完成时调用的方法(一共 59 种方法)
CompletionStage 的接口一般都返回新的CompletionStage,
表示执行完一些逻辑后,生成新的CompletionStage,构成链式的阶段型的操作。
Java5 Future
Java8 CompletableFuture
最初两个线程间的协调采用过 Object 的 wait() 和 notify() , Thread 的join() 方法
简单的等待所有线程完成可使用 Java5 的 CountDownLatch
Future 完成后执行动作,或求取下一个 Future 的值。then
多个 Future 的协调; 同时完成后执行,其中一个完成后执行。allOf, anyOf
CompletableFuture 有很多方法,有 async 与 非 async 两个版本
如果不用 Future 或 CompletableFuture, 想要实现等待某个线程完成之后才做后续的事,可以用join或wait等。
用 CompletableFuture 更好。
在前一个阶段上应用函数 thenApply
在前一个阶段上异步应用函数 thenApplyAsync
串联起来的CompletableFuture可以异步地执行(使用ForkJoinPool.commonPool())
CompletableFuture cf = CompletableFuture.completedFuture("message").thenApply(s -> {
// Thread[main,5,main]
System.out.println(Thread.currentThread());
// sleep 1s
CommUtil.doSleep(1000);
return s.toUpperCase();
});
// MESSAGE
System.out.println(cf.getNow(null));
CompletableFuture cf2 = CompletableFuture.completedFuture("message2").thenApplyAsync(s -> {
// Thread[ForkJoinPool.commonPool-worker-25,5,main]
System.out.println(Thread.currentThread());
// sleep 1s
return s.toUpperCase();
});
// null
System.out.println(cf2.getNow(null));
// MESSAGE2
System.out.println(cf2.join());
CompletableFuture 例子
上一篇
下一篇
ehcache3 过期测试
vertx架构简介
CompletableFuture 例子
vertx future compose CompositeFuture
vertx future高级组合操作
vertx future 与 CompletionStage 互操作