首页  

CompletionStage 说明     所属分类 java 浏览量 116
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 互操作