CompletableFuture使用样例


前言

CompletableFuture是对Future的扩展和增强。CompletableFuture实现了Future接口,并在此基础上进行了丰富的扩展,完美弥补了Future的局限性,同时CompletableFuture实现了对任务编排的能力。借助这项能力,可以轻松地组织不同任务的运行顺序、规则以及方式。从某种程度上说,这项能力是它的核心能力# 系列文章目录


一、故事

  • 老爷和两个管家
  • 老爷想喝茶
  • 让两个管家协助
  • 一个烧水
  • 一个选茶叶
  • 自己去上厕所
  • 回来就可以喝茶
  • 岂不乐哉???

二、使用前用到的api

  • CompletableFuture 默认使用的是内部线程池,可自定义线程池使用
  • CompletableFuture.supplyAsync 创建异步调用任务
  • future.thenAccept 执行完成后通知
    表示第一个任务执行完成后,执行第二个回调方法任务,会将该任务的执行结果,作为入参,传递到回调方法中,并且回调方法是有返回值的。
  • thenRun/thenRunAsync
    通俗点讲就是,做完第一个任务后,再做第二个任务,第二个任务也没有返回值
  • CompletableFuture.allOf 编排异步任务 - 全部成功后通知thenAccept, 类似创建一个异步监听
  • future.join() 主线程会等待
  • supplyAsync 执行任务,支持返回值。
  • runAsync 执行任务,没有返回值。

三、直接上代码

管家需要做的两件事

@Service
public class TeaService {
   
   

    //烧茶水
    public Integer heatUpWater(){
   
   
        try {
   
   
            Thread.sleep(5000);
        } catch (InterruptedException e) {
   
   
            e.printStackTrace();
        }
        return 20;
    }

    //挑选茶
    public Double getTeas(){
   
   
        try {
   
   
            Thread.sleep(1000);
        } catch (InterruptedException e) {
   
   
            e.printStackTrace();
        }
        return 20D;
    }
}

老爷的吩咐

@Service
@Slf4j
public class QueryService {
   
   

    @Autowired
    private TeaService teaService;

    public Map<String,Object> queryGoodsInfo(){
   
   
        Map<String, Object> r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值