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

「Spring Boot:2.2.1」

师傅:知道如何实现异步调用嘛?

悟纤:这个我知道,使用多线程就可以了。

师傅:继续不要停。

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

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

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

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

一、什么是异步调用

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

二、如何实现异步调用?

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

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

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

三、@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注解方法,实现异步任务。

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

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

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
发布了159 篇原创文章 · 获赞 200 · 访问量 68万+

猜你喜欢

转载自blog.csdn.net/linxingliang/article/details/103990362