一、开发环境
二、代码实现
异步任务的实现说实话非常简单。
第一步:创建SpringbootAsyncTask项目
第二步:开启异步任务的开关
@SpringBootApplication @EnableAsync//打开异步任务开关 public class SpringbootasynctaskApplication { public static void main(String[] args) { SpringApplication.run (SpringbootasynctaskApplication.class, args); } }
只需要在启动类里面添加一个注解开关即可。
第三步:新建MyAsyncTask类
@Component public class MyAsyncTask { @Async public void task1() throws InterruptedException { long start = System.currentTimeMillis(); Thread.sleep(1000); long end = System.currentTimeMillis(); System.out.println("任务一耗时:"+ (end-start)+"毫秒"); } //任务2,我们不添加注解,便于验证 public void task2() throws InterruptedException { long start = System.currentTimeMillis(); Thread.sleep(2000); long end = System.currentTimeMillis(); System.out.println("任务二耗时:"+ (end-start)+"毫秒"); } //任务3,我们不添加注解,便于验证 public void task3() throws InterruptedException { long start = System.currentTimeMillis(); Thread.sleep(3000); long end = System.currentTimeMillis(); System.out.println("任务三耗时:"+ (end-start)+"毫秒"); } }
在这里定义了3个任务,但是只有在第一个任务方法上加了异步注解。这是为了便于我们的时间验证。
第四步:新建MyController类
@Controller public class MyController { @Autowired private MyAsyncTask asyncTask; @GetMapping("/test") public void test() throws InterruptedException { long start = System.currentTimeMillis(); asyncTask.task1(); asyncTask.task2(); asyncTask.task3(); long end = System.currentTimeMillis(); System.out.println("任务全部完成,总耗时:"+(end-start)+"毫秒"); } }
这个类的功能很明显,就是调用了三个方法。
第五步:访问链接,测试一下
任务一耗时:1000毫秒 任务二耗时:2000毫秒 任务三耗时:3001毫秒 任务全部完成,总耗时:5011毫秒
我们发现三个任务加起来本来大致6秒,但是5秒就结束了,这是因为任务1是异步执行的,注意这里不是严格的3秒和5秒,这是因为虚拟机还做了一些其他的操作。
异步任务的应用场景非常多,比如说发送短信、发送邮件、消息推送、定时发布消息等等。不过一般结合其他的技术来实现我们的功能。这个实现起来非常的简单。