springboot异步注解_真漂亮,异步调用还能这么玩 - 第293篇

dd8fe2eed0588f0014368a995cebf8ca.png

相关历史文章(阅读本文之前,您可能需要先看下之前的系列 )

为什么你要阻碍我,你看我扎不扎你「见鬼,定时任务延迟执行?」 - 第292篇

「Spring Boot:2.2.1」
师傅:知道如何实现异步调用嘛?
悟纤:这个我知道,使用多线程就可以了。
师傅:继续不要停。

de4dde3504055fd16b903a12a91452e7.png

悟纤:就是实现Runnable接口或者继承Thread类。

师傅:在开动一下大脑还有别的没?

6a4e8ac1538af7ce6568abaf5f8daa8e.gif

悟纤:师傅,我想起来了,在使用jdk1.5以上提供了的Executors线程池,所以还可以使用线程池进行实现。

师傅:孺子可教,在非Spring的项目中实现的方式说的差不多了。但是在Spring项目中,可是有更简单的使用方式哦。

e19f6d0b3c3a2ae9d718b0a1ba4cf3ab.png

一、什么是异步调用

异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。

二、如何实现异步调用?

多线程,这是很多人能想到的关键词,没错,多线程就是一种实现异步调用的方式。

在非spring目项目中我们要实现异步调用的就是使用多线程方式,可以自己实现Runable接口或者集成Thread类,或者使用jdk1.5以上提供了的Executors线程池。

在Spring 3.0之后就有了更简单的方式一个,一个注解@Async,轻松搞定,妈妈再也不用担心我为异步任务烦恼了。

61b349e4a765c5fe35f1a99aeecf6a8c.png

三、@Async如何使用

@Async如何进行使用呢,只需要两步:

(1)启用异步任务:在启动类上添加@EnableAsync注解,启用异步任务,该注解主要是为了扫描范围包下的@Async的注解。

(2)异步任务注解:在需要异步执行的方法上添加@Async注解,此方法即是异步执行的。

3.1 启用异步任务

在启动类上添加@EnableAsync注解:

@SpringBootApplication
@EnableAsync //启用异步任务
public class SpringBootAsyncApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootAsyncApplication.class, args);
    }
} 

3.2 异步任务注解

在需要异步的方法添加@Async注解:

   @Async
    public void task1() throws InterruptedException {
        long startTime = System.currentTimeMillis();
        TimeUnit.SECONDS.sleep(1);
        long endTime= System.currentTimeMillis();
        System.out.println("task1耗时:"+(endTime-startTime) );
    }


    @Async
    public void task2() throws InterruptedException {
        long startTime = System.currentTimeMillis();
        TimeUnit.SECONDS.sleep(2);
        long endTime= System.currentTimeMillis();
        System.out.println("task2耗时:"+(endTime-startTime) );
    }

异步方法的调用,原先怎么调用方法还是怎么就可以。

asyncTask.task1();
asyncTask.task2();

四、悟纤小结

悟纤:师傅,你累了,我来进行个小结吧。

(1)异步任务的实现方式:多线程、线程池、异步注解。
(2)多线程:多线程的实现就是实现Runnable接口和继承Thread类。
(3)线程池:使用Executors构建ExecutorService,使用ExecutorService的execute执行线程。
(4)异步注解:在Spring 3.0+的框架中可以使用@Async注解方法,实现异步任务。

悟纤:师傅,那有没有办法知道什么时候执行完毕和执行的结果呢 ?

师傅:这个是必须的,下节分享在揭晓。

17062a2ca8eee34497e939a45240dade.gif
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
学院中有 Spring Boot相关的课程:
à悟空学院: https:// t.cn/Rg3fKJD
SpringBoot视频: http:// t.cn/A6ZagYTi
Spring Cloud视频: http:// t.cn/A6ZagxSR
SpringBoot Shiro视频: http:// t.cn/A6Zag7IV
SpringBoot交流平台: https:// t.cn/R3QDhU0
SpringData和JPA视频: http:// t.cn/A6Zad1OH
SpringSecurity5.0视频: http:// t.cn/A6ZadMBe
Sharding-JDBC分库分表实战: http:// t.cn/A6ZarrqS
分布式事务解决方案「手写代码」: http:// t.cn/A6ZaBnIr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值