#yyds干货盘点# springboot使用@Async实现异步调用
Posted 灰太狼_cxh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# springboot使用@Async实现异步调用相关的知识,希望对你有一定的参考价值。
springboot使用@Async实现异步调用
1.代码实现:
创建异步任务类
@Slf4j
@Component
public class AsyncTasks
public static Random random = new Random();
@Async
public CompletableFuture<String> doTaskOne() throws Exception
log.info("开始做任务一");
long start = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
long end = System.currentTimeMillis();
log.info("完成任务一,耗时:" + (end - start) + "毫秒");
return CompletableFuture.completedFuture("任务一完成");
@Async
public CompletableFuture<String> doTaskTwo() throws Exception
log.info("开始做任务二");
long start = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
long end = System.currentTimeMillis();
log.info("完成任务二,耗时:" + (end - start) + "毫秒");
return CompletableFuture.completedFuture("任务二完成");
@Async
public CompletableFuture<String> doTaskThree() throws Exception
log.info("开始做任务三");
long start = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
long end = System.currentTimeMillis();
log.info("完成任务三,耗时:" + (end - start) + "毫秒");
return CompletableFuture.completedFuture("任务三完成");
启动类添加异步注解
@EnableAsync
@SpringBootApplication
public class AsyncTaskApplication
public static void main(String[] args)
SpringApplication.run(AsyncTaskApplication.class, args);
测试类
@Slf4j
@SpringBootTest
class AsyncTaskApplicationTests
@Autowired
private AsyncTasks asyncTasks;
@Test
void contextLoads()
@Test
public void Test() throws Exception
long start = System.currentTimeMillis();
CompletableFuture<String> task1 = asyncTasks.doTaskOne();
CompletableFuture<String> task2 = asyncTasks.doTaskTwo();
CompletableFuture<String> task3 = asyncTasks.doTaskThree();
CompletableFuture.allOf(task1, task2, task3).join();
long end = System.currentTimeMillis();
log.info("任务全部完成,总耗时:" + (end - start) + "毫秒");
2.实现效果:
2021-12-29 16:23:10.176 INFO 7500 --- [ main] c.c.a.AsyncTaskApplicationTests : Started AsyncTaskApplicationTests in 1.054 seconds (JVM running for 3.159)
2021-12-29 16:23:10.613 INFO 7500 --- [ task-2] com.cxh.async_task.task.AsyncTasks : 开始做任务二
2021-12-29 16:23:10.613 INFO 7500 --- [ task-1] com.cxh.async_task.task.AsyncTasks : 开始做任务一
2021-12-29 16:23:10.614 INFO 7500 --- [ task-3] com.cxh.async_task.task.AsyncTasks : 开始做任务三
2021-12-29 16:23:14.654 INFO 7500 --- [ task-2] com.cxh.async_task.task.AsyncTasks : 完成任务二,耗时:4041毫秒
2021-12-29 16:23:15.138 INFO 7500 --- [ task-3] com.cxh.async_task.task.AsyncTasks : 完成任务三,耗时:4524毫秒
2021-12-29 16:23:15.873 INFO 7500 --- [ task-1] com.cxh.async_task.task.AsyncTasks : 完成任务一,耗时:5259毫秒
2021-12-29 16:23:15.874 INFO 7500 --- [ main] c.c.a.AsyncTaskApplicationTests : 任务全部完成,总耗时:5320毫秒
可以看到,通过异步调用,让任务一、二、三并发执行,有效的减少了程序的总运行时间。
以上是关于#yyds干货盘点# springboot使用@Async实现异步调用的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# springboot配置@Async异步任务的线程池
#yyds干货盘点# SpringBoot 发送邮箱验证码(HTML模板)
#yyds干货盘点# springboot使用@SpringBootTest注解进行单元测试
#yyds干货盘点#jackson学习之九:springboot整合(配置文件)