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

最低0.47元/天 解锁文章
446

被折叠的 条评论
为什么被折叠?



