spring boot 使用@Async实现异步调用方法

发布时间 - 2026-01-11 00:51:01    点击率:

使用@Async实现异步调用

什么是”异步调用”与”同步调用”

“同步调用”就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码执行完毕才能执行;”异步调用”则是只要上一行代码执行,无需等待结果的返回就开始执行本身任务。
通常情况下,”同步调用”执行程序所花费的时间比较多,执行效率比较差。所以,在代码本身不存在依赖关系的话,我们可以考虑通过”异步调用”的方式来并发执行。

“异步调用”

在 spring boot 框架中,只要提过@Async注解就能奖普通的同步任务改为异步调用任务。
注意: @Async所修饰的函数不要定义为static类型,这样异步调用不会生效

1. 开启@Async注解

在Spring Boot主类添加@EnableAsync注解

2. 定义异步任务

定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内)。

@Component
public class Task {

  //定义一个随机对象.
  public static Random random =new Random();

  @Async //加入"异步调用"注解
  public void doTaskOne() throws InterruptedException {
    System.out.println("开始执行任务一");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任务一,耗时:" + (end - start) + "毫秒");
  }

  @Async
  public void doTaskTwo() throws InterruptedException {
    System.out.println("开始执行任务二");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任务二,耗时:" + (end - start) + "毫秒");
  }

  @Async
  public void doTaaskThree() throws InterruptedException {
    System.out.println("开始执行任务三");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任务三,耗时:" + (end - start) + "毫秒");
  }
}

3. 创建Controller进行测试

注意@Autowired注入类,因为这个类已经被 Spring 管理了。如果使用 new 来获得线程类将不会执行异步效果,这里涉及到在 Spring 中使用多线程。

@Controller
public class TaskController {

  @Autowired
  private Task TASK;

  @ResponseBody
  @RequestMapping("/task")
  public String task() throws Exception {
    System.out.println("开始执行Controller任务");
    long start = System.currentTimeMillis();
    TASK.doTaskOne();
    TASK.doTaskTwo();
    TASK.doTaaskThree();
    long end = System.currentTimeMillis();
    System.out.println("完成Controller任务,耗时:" + (end - start) + "毫秒");
    return "success";
  }
}

4. 多次调用

访问 http://localhost:8080/task 截图:

项目参考地址: https://github.com/FunriLy/springboot-study/tree/master/%E6%A1%88%E4%BE%8B7

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # boot  # 异步调用  # async  # springboot  # 异步  # 详解springboot通过Async注解实现异步任务及回调的方法  # SpringBoot用@Async注解实现异步任务  # Springboot中@Async异步  # 实现异步结果合并统一返回方式  # 完成任务  # 就能  # 则是  # 我们可以  # 不存在  # 涉及到  # 比较多  # 多线程  # 大家多多  # 提过  # 进行测试  # 等上  # 情况下  # 就开始  # currentTimeMillis  # start  # Random  # public  # Component 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何在宝塔面板创建新站点?  JavaScript实现Fly Bird小游戏  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  JavaScript中的标签模板是什么_它如何扩展字符串功能  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  网站建设保证美观性,需要考虑的几点问题!  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  如何在万网自助建站中设置域名及备案?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  如何在Windows环境下新建FTP站点并设置权限?  网页设计与网站制作内容,怎样注册网站?  如何实现javascript表单验证_正则表达式有哪些实用技巧  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  node.js报错:Cannot find module 'ejs'的解决办法  在centOS 7安装mysql 5.7的详细教程  Swift开发中switch语句值绑定模式  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  java获取注册ip实例  Laravel如何配置Horizon来管理队列?(安装和使用)  微信小程序 input输入框控件详解及实例(多种示例)  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel怎么清理缓存_Laravel optimize clear命令详解  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何快速搭建FTP站点实现文件共享?  如何用免费手机建站系统零基础打造专业网站?  如何在万网自助建站平台快速创建网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  香港服务器租用费用高吗?如何避免常见误区?  IOS倒计时设置UIButton标题title的抖动问题  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  高性价比服务器租赁——企业级配置与24小时运维服务  音乐网站服务器如何优化API响应速度?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  网站建设整体流程解析,建站其实很容易!  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  齐河建站公司:营销型网站建设与SEO优化双核驱动策略