Spring Boot -09 异步任务
基本概念:
多个任务同时执行,类似于多线程的概念
SpringBoot使用注解方式开启异步任务:
步骤
(1)启动类中添加 @EnableAsync 注解,开启异步任务,自动扫描
@SpringBootApplication
@ServletComponentScan
// @EnableAsync注解的作用是开启异步任务
@EnableAsync
public class lication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(HelloApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(lication .class, args);
}
}
(2)创建异步任务
// @Component注解的作用是实现bean的注入,会被Springboot扫描
@Component
// @Async注解的作用是标识这是一个异步类或方法
@Async
public class Task {
public void task1(){
try {
Thread.sleep(4000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" 任务:1 ");
}
// 任务二:睡眠4秒,并输出一个字符串
public void task2(){
try {
Thread.sleep(4000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("任务:2 ");
}
}
创建接口
@Autowired
private AsyncTask asyncTask;
@GetMapping("task")
public JsonData testAsync(){
// 首先拿到系统本身的时间
long begin = System.currentTimeMillis();
// 测试三个任务的异步性,根据耗时做测试
Future<String> task1 =asyncTask.task1();
Future<String> task2 =asyncTask.task2();
// 任务四和任务五都完成,则结束执行
for(;;){
if(task1.isDone() && task2.isDone()){
try {
// get是为了拿到对应的结果
String task1Result = task1.get();
System.out.println(task1Result);
String task2Result = task2.get();
System.out.println(task2Result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}finally {
break;
}
}
}
// 拿到系统异步方法结束的时间
long end = System.currentTimeMillis();
// 返回时间差(结束时间 - 开始时间)
return JsonData.buildSuccess(end - begin);
}
源码地址:https://download.csdn.net/download/qq_41781775/19148752