美文网首页Spring
Spring Boot实现异步调用(@Async)

Spring Boot实现异步调用(@Async)

作者: 莫问以 | 来源:发表于2019-07-15 16:05 被阅读1次

Spring Boot官网down项目之后,pom.xml报unkown error错误,是由于官网down的version默认为<version>2.1.5.RELEASE</version>,我们修改为<version>2.1.3.RELEASE</version>或者更低版本<version>2.1.1.RELEASE</version>即可。

1、什么是“异步调⽤”?
同步调⽤指程序按照定义顺序依次执⾏,每⼀⾏程序都必须等待上⼀⾏程序执⾏完成之后才能执⾏。
比如我们定义一个顺序:吃饭前先洗手,洗完手才能吃饭,吃完饭才可以吃水果,如:

import java.util.Random;

import org.springframework.stereotype.Component;

@Component
public class SynchronizeTask {
    public static Random random = new Random();

    public void doTaskOne() throws Exception {
        System.out.println("吃饭前先洗手");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("洗手耗时:" + (end - start) + "毫秒");
    }

    public void doTaskTwo() throws Exception {
        System.out.println("准备吃饭");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("吃饭耗时:" + (end - start) + "毫秒");
    }

    public void doTaskThree() throws Exception {
        System.out.println("吃完饭吃水果");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("吃水果耗时:" + (end - start) + "毫秒");
    }
}
public static void main(String[] args) {
        SynchronizeTask task = new SynchronizeTask();
        try {
            task.doTaskOne();
            task.doTaskTwo();
            task.doTaskThree();
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }
同步输出.png

同步调用是上一步没执行完,就只能等着,而且执⾏时间⽐较⻓,效率低下。这个时候,若这三个任务本身之间不存在依赖关系,可以考虑通过异步调⽤的⽅式来并发执⾏。

异步调⽤指程序在顺序执⾏时,不等待异步调⽤的语句返回结果就执⾏后⾯的程序。在Spring Boot中,可以通过 @Async 注解就能将同步函数变为异步函数,Task类改在为如下模式:

相关文章

网友评论

    本文标题:Spring Boot实现异步调用(@Async)

    本文链接:https://www.haomeiwen.com/subject/tzdckctx.html