项目中需要用到多渠道数据查询,使用CompletableFuture可以很好的满足需求
什么是CompletableFuture
可以实现异步任务,以及异步任务之间的协作
使用示例
代码语言:javascript复制String idcard = "100";
CompletableFuture<Void> future = CompletableFuture
//创建一个异步任务,从idcard获取对应的id
.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return Integer.parseInt(idcard);
})
//如果出现异常,则返回id=0
.exceptionally((e) -> 0)
//再根据id获取对应的User
.thenApply((id) -> {
return User.builder()
.idcard(id.toString())
.id(id)
.name("name" id)
.build();
})
//输出到System.out
.thenAccept(System.out::println);
常用接口
代码语言:javascript复制# 创建一个异步任务
CompletableFuture#supplyAsync
# 创建一个特殊的异步任务,当其关联的异步任务任意一个完成时就返回
CompletableFuture#anyOf
# 创建一个特殊的异步任务,当其关联的异步任务都完成时就返回
CompletableFuture#allOf
# 当发生异常时的处理逻辑:注意,出现异常后,执行逻辑还会继续,并不会跳出来
CompletableFuture#exceptionally
# 继续处理结果,并返回新的结果
CompletableFuture#thenApply
# 与其他的异步任务结合,都执行完毕后再执行新的任务
CompletableFuture#thenCombine
# 继续异步处理结果,并返回新任务对应的CompletableFuture。与thenApplyAsync很类似,但是返回结果更加友好,类似于stream中的flatMap
CompletableFuture#thenCompose
# 处理最后的结果
CompletableFuture#thenAccept
参考
- CompletableFuture | thenApply vs thenCompose