当前位置: 首页 > news >正文

@Async注解提升Spring Boot项目中API接口并发能力

文章目录

  • 同步调用
  • 异步调用
        • 1: 启用异步支持
        • 2: 修改 Task 类
  • 异步回调
        • 基本概念
        • 使用 Future<String>
        • 使用 CompletableFuture<String>
        • Future<String> 和 CompletableFuture<String>区别
          • 1. 基本概念
          • 2. 主要区别

同步调用

同步调用是最直接的调用方式,调用方发起请求后会阻塞等待服务端返回结果,直到得到响应或超时。这种方式简单直观,但可能因为等待响应而降低系统的整体性能。
下面定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内)

@Component
public class Task {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) + "毫秒");}}

@Component

是 Spring 框架中的一个注解,主要用于标记一个 Java 类作为 Spring 的 Bean。Spring 的 IoC(Inversion of Control,控制反转)容器会管理这些 Bean 的生命周期和配置。@Component 是一个通用的注解,可以用于任何 Spring 管理的组件。
结果展示:
在这里插入图片描述

  1. 每个任务的实际执行时间是不同的,这与 Thread.sleep(random.nextInt(10000)) 有关,它会让线程暂停一个介于0到9999毫秒之间的随机时间。
  2. 从输出顺序来看,这些任务是按顺序执行的,即一个任务完成后才会开始下一个任务。这意味着这三个方法是在同一个线程中依次调用的,没有采用多线程或异步处理的方式。
  3. 由于使用了 Random 类来生成等待时间,所以每次运行程序时,每个任务的实际耗时都会有所不同。

异步调用

在 Spring Boot 中,使用 @Async 注解可以非常方便地将一个方法转换为异步执行。但是为了使 @Async 生效,还需要一些额外的配置。下面是一个具体的示例,展示如何修改您的 Task 类以支持异步执行,并且确保 Spring Boot 应用能够正确配置异步支持。

1: 启用异步支持
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;@SpringBootApplication
@EnableAsync
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class
http://www.lryc.cn/news/477565.html

相关文章:

  • SpringBoot集成Flink-CDC
  • SQL报错注入检测方法与攻击方法
  • Linux内核编程(十九)SPI子系统的应用与驱动编写
  • MVC 文件夹结构详解
  • 远程操作Linux服务器 _Xshell、Xftp以及Linux常见操作命令
  • 单链表的实现(数据结构)
  • 印刷质量检测笔记
  • 16、论文阅读:Mamba YOLO:用于目标检测的基于 SSM 的 YOLO
  • python项目实战---使用图形化界面下载音乐
  • 无人机干扰与抗干扰,无人机与反制设备的矛与盾
  • JAVA基础:单元测试;注解;枚举;网络编程 (学习笔记)
  • Meta 上周宣布正式开源小型语言模型 MobileLLM 系列
  • 安全篇(1)判断安全固件
  • ArcGIS005:ArcMap常用操作101-150例动图演示
  • 如何用ChatGPT结合Python处理遥感数据
  • matlab 质心重合法实现点云配准
  • ubuntu双屏只显示一个屏幕另一个黑屏
  • 小菜家教平台:基于SpringBoot+Vue打造一站式学习管理系统
  • 网络自动化03:简单解释send_config_set方法并举例
  • 跳表原理笔记
  • 计算机毕业设计Hadoop+PySpark深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
  • AI开发-三方库-torch-torchvision
  • 解析 MySQL 数据库容量统计、存储限制与优化技巧
  • 智能工厂的软件设计 思维进阶与数学程序
  • 技术速递|GitHub Copilot upgrade assistant for Java 技术预览发布!
  • 淘宝有哪些API是用来获取商品列表的?(商品id列表)
  • D59【python 接口自动化学习】- python基础之异常
  • 解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析
  • 从xss到任意文件读取
  • nuiapp vue3 uni-ui uni.uploadFile 图片上传