美文网首页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