CompletableFuture初步介绍
1、概述
大家好,我是欧阳方超。本次就Java中CompletableFuture做初步介绍。
2、关于CompletableFuture
CompletableFuture是Java8中引入的一个用于异步计算的类。它允许我们异步地执行计算,并在计算完成后获取结果或继续处理结果。
2.1、主要用法
主要使用方式如下:
- supplyAsync:异步供给一个值。
例如:
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 1);
- runAsync:异步执行一个任务。
例如:
CompletableFuture.runAsync(() -> { /* 异步任务 */ });
- thenApply:执行后续操作。
例如:
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 1)
.thenApply(x -> x + 1);
- thenAccept :执行 Consumer 操作。
例如:
future.thenAccept(x -> { /* ... */ });
在这里插入代码片
- get():获取异步计算的结果。
例如:
Integer result = future.get();
- join():等待异步计算完成。
2.2、示例
下面通过一个例子体会CompletableFuture的使用。
public class Main {
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
return "你好";
});
future.thenAccept(s -> {
System.out.println(s);
});
}
}
程序输出结果:
你好
在上面的示例中,首先使用CompletableFuture.supplyAsync()创建了一个CompletableFuture,该Future会异步执行一个返回String的生产者(supplier),其次future.thenAccept()注册了一个消费者(Consumer),当Future的计算完成后,会自动调用该消费之,并将结果作为参数传入,最终打印“你好”。
执行流程大致如下:
主线程调用supplyAsync()提交一个异步任务;
主线程继续执行,不等待该异步任务;
当异步任务执行完成后,它会自动触发thenAccept()中注册的回调Consumer,并把结果传入;
该Consumer被调用,打印结果;
主线程无需关心异步任务的执行,也不需要手动获取其结果。一切都由CompletableFuture自动完成。
CompletableFuture做到了异步任务和回调操作逻辑分离,而且开发者不用自己创建线程池,其底层使用的是ForkJoinPool相关方法实现的。
3、总结
这就是CompletableFuture的基本思想,它允许我们提交异步任务,并注册回调,当异步任务完成时,回调会自动触发。我们把一系列的异步任务和回调串联起来,就可以实现复杂的异步流程控制。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。