前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 之异步调用Async

Spring Boot 之异步调用Async

作者头像
Bobby
发布2019-06-11 20:19:23
1.8K0
发布2019-06-11 20:19:23
举报
文章被收录于专栏:开心码农开心码农开心码农

介绍

“何为异步调用?” “日常中我们大多数业务都是同步调用,前端访问后端接口时,后端必须一步一步处理完成后返回给前端,前端渲染结果。那么异步调用指的就是前端访问后端接口时,后端可以先返回通知前端,比如:记录操作log这类与前端无关系的操作就可以通过异步调用,进而优化接口的返回速度”

为什么要用异步

为什么要用异步,我们先来看一下同步,假设一下的sleep()为某方法执行所需时间 1.同步 TestService.java

/**
 * @Author: Bobby
 * @Date: 2019/5/24 15:48
 */
@Component
public class TestService {

    private final static Logger logger = LoggerFactory.getLogger(TestService.class);

    /**
     * 同步
     * @throws InterruptedException
     */
    public void synchroEvent() throws InterruptedException{
        Thread.sleep(3000);
        Thread.sleep(2000);
        Thread.sleep(1000);
        logger.info("同步方法执行完了");
    }
}

TestController.java

/**
 * 同步方法 等候6秒后返回
 * @return
 */
@GetMapping("/synchroEvent")
public String test(){
    long start = System.currentTimeMillis();
    try {
        testService.synchroEvent();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    long end = System.currentTimeMillis();
    logger.info("同步方法用时:{}",end-start);
    return "成功";
}

运行结果:

 cn.shuibo.service.TestService            : 同步方法执行完了
 cn.shuibo.controller.TestController      : 同步方法用时:6007

2.异步 TestService.java

/**
 * @Author: Bobby
 * @Date: 2019/5/24 15:48
 */
@Component
public class TestService {

    private final static Logger logger = LoggerFactory.getLogger(TestService.class);

    /**
     * 异步
     * @throws InterruptedException
     */
    @Async
    public void asyncEvent() throws InterruptedException{
        Thread.sleep(3000);
        Thread.sleep(2000);
        Thread.sleep(1000);
        logger.info("异步方法执行完了");
    }
}

TestController.java

/**
 * 异步方法 即时返回(后台处理)
 * @return
 */
@GetMapping("/asyncEvent")
public String test1(){
    long start = System.currentTimeMillis();
    try {
        testService.asyncEvent();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    long end = System.currentTimeMillis();
    logger.info("异步方法用时:{}",end-start);
    return "成功";
}

运行结果:

cn.shuibo.controller.TestController      : 异步方法用时:0

过了6秒后:

cn.shuibo.service.TestService            : 异步方法执行完了
总结

通过以上实践,同步与异步的区别,可以看出同步返回时间6秒左右,异步几乎0秒返回,同步是先执行完再返回的,异步是先返回后执行的。开启异步时记得在方法上添加 @Async注解,Spring Boot启动类通过 @EnableAsync注解开启异步。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 为什么要用异步
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档