@Async异步执行
程序员文章站
2022-04-30 20:36:08
...
springBoot异步执行方法@Async
1.什么是异步调用?
异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。
2.如何实现异步调用?
多线程,这是很多人第一眼想到的关键词,没错,多线程就是一种实现异步调用的方式。
在非spring目项目中我们要实现异步调用的就是使用多线程方式,可以自己实现Runable接口或者集成Thread类,或者使用jdk1.5以上提供了的Executors线程池。
3.举例说明:
① maven依赖:
maven依赖
② springboot启动类:
springBoot启动类
@EnableAsync 注解主要是为了扫描范围包下的所有 @Async注解
③ Controller层业务代码:
Controller层业务
④ 异步任务类代码:
异步任务类
执行结果:
执行结果
4.如何知道什么时候执行完毕和执行的结果呢?采用Future来做
①异步任务类:
异步任务类
② Controller层代码逻辑
Controller层代码逻辑
③ 执行结果:
controller层
Future<Option> futureB = asyncTaskService.getBarChartToday(searchStatus, beginTimestamp, endTimestamp);
Option optionBar = futureB.get();
dataJson.put("barChartData", JSON.toJSONString(optionBar));
long barChartDataTime = System.currentTimeMillis();
logger.info("------------查询getBarChartToday用时:【"+(barChartDataTime-sdataTime)+"】毫秒----------");
service层
@Async
public Future<Option> getBarChartToday(Boolean searchStatus, String beginTimestamp, String endTimestamp) {
option.series(amountBar, totalBar);
//返回
return new AsyncResult<Option>(option);
}
}
}