CompletableFuture是什么
- CompletableFuture是Java8中提供的Future的扩展功能,简化异步编程的复杂性;
- 引入函数式编程,通过回调的方式处理计算结果,也提供了转换和组合的方法;
- 它实现了Future和CompletionStage接口;
- 借助CompletionStage的方法可以实现链式调用;
- 一个CompletetableFuture就代表了一个任务,可以用then,when等操作来防止阻塞和轮询isDone的现象出现;
- 它可能代表一个明确完成的Future,也有可能代表一个完成阶段( CompletionStage ),它支持在计算完成以后触发一些函数或执行某些动作;
创建方式
1、创建一个具有默认结果的 CompletableFuture,不经常使用;
2、supplyAsync表示创建带返回值的异步任务,相当于ExecutorService submit(Callable<T> task),这两方法的效果跟submit是一样的。
3、runAsync表示创建无返回值的异步任务,相当于ExecutorService submit(Runnable task);
样例:
public static void main(String[] args) {
// runAsync的使用
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(() -> System.out.println("Hello runAsync!"));
// supplyAsync的使用
CompletableFuture<String> supplyFuture = CompletableFuture.supplyAsync(() -> {
System.out.println("Hello supplyAsync!");
return "Hello World";
});
// runAsync的future没有返回值,输出null
System.out.println("runAsync结果:" + runFuture.join());
// supplyAsync的future,有返回值
System.out.println("supplyAsync结果:" + supplyFuture.join());
}
结果: