CompletableFuture常用使用方法

2021-07-23 16:04:17 浏览数 (1)

项目中需要用到多渠道数据查询,使用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

0 人点赞