实际场景
- 电商系统:在查询商品信息时,可能需要从多个数据源(如数据库、缓存)获取数据,并且获取到商品基本信息后,需要对信息进行格式处理,如价格格式化等,这种场景可以使用
thenApply
方法,先异步获取数据,再异步处理数据。
- 图像处理:在从远程服务器下载图片后,需要对下载的图片数据进行格式转换、添加水印等处理。先异步下载图片,再异步对图片进行处理。
代码示例
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture.supplyAsync(() -> {
// 模拟异步任务,比如从数据库查询数据
System.out.println("异步任务开始执行");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "任务执行结果";
}).thenApply(result -> {
// 对异步任务的结果进行处理
System.out.println("开始处理任务结果");
return "处理后的结果: " + result;
}).thenAccept(System.out::println);
// 主线程睡眠,保证异步任务有时间执行
Thread.sleep(3000);
}
}