当前位置: 首页 > 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

相关文章:

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

文章目录 同步调用异步调用1: 启用异步支持2: 修改 Task 类异步回调基本概念使用 Future<String>使用 CompletableFuture<String>Future<String> 和 CompletableFuture<String>区别1. 基本概念2. 主要区别同步调用 同步调用是最直接的调用方式,调用方…...

SpringBoot集成Flink-CDC

Flink CDC CDC相关介绍 CDC是什么? CDC是Change Data Capture(变更数据获取)的简称。核心思想是&#xff0c;监测并捕获数据库的变动&#xff08;包括数据或数据表的插入、更新以及删除等&#xff09;&#xff0c;将这些变更按发生的顺序完整记录下来&#xff0c;写入到MQ以…...

SQL报错注入检测方法与攻击方法

报错注入 即是注入检测方法&#xff0c;又是注入读取数据的方法 攻击者在判断一个参数是否存在SQL注入漏洞时&#xff0c;会拼接单引号&#xff0c;反斜杠字符&#xff0c;如果显示语法报错&#xff0c;证明这个位置具有SQL注入漏洞&#xff0c;也可以通过整数溢出来判断&…...

Linux内核编程(十九)SPI子系统的应用与驱动编写

本文目录 一、 SPI驱动框架图二、编写SPI驱动device框架三、编写SPI驱动driver框架四、实验一编写mcp2515驱动1. 注册字符设备或杂项设备框架2. SPI写数据3. SPI读寄存器数据 4. MCP2515相关配置 对于SPI基础知识这里不做过多讲解&#xff0c;详情查看&#xff1a;SPI基础知识实…...

MVC 文件夹结构详解

MVC 文件夹结构详解 MVC(Model-View-Controller)是一种广泛应用于软件开发中的设计模式,它通过将应用程序分为三个核心组件——模型(Model)、视图(View)和控制器(Controller)——来组织代码,提高代码的可维护性和可扩展性。在MVC模式中,每个组件都有其特定的职责,…...

远程操作Linux服务器 _Xshell、Xftp以及Linux常见操作命令

工具推荐 Xshell和Xftp是两款由NetSarang公司开发的、广受欢迎的软件工具&#xff0c;它们分别专注于终端模拟和文件传输&#xff0c;为用户提供了便捷的操作和强大的功能。以下是对这两款软件的详细解析&#xff1a; 一、Xshell 定义与功能 Xshell是一个强大的安全终端模拟软…...

单链表的实现(数据结构)

一. 单链表的实现 我们在上一篇中简单的认识了链表的组成和结构&#xff0c;并打印出链表&#xff0c;那么今天就来具体实现一下单链表对于数据增加、删减、插入等。 接下来就是我们在链表中对于数据的增、删、插的实现&#xff0c;对于我们的链表来说在任何地方增加数据都需…...

印刷质量检测笔记

一、印刷质量检测的背景与挑战 印刷品的质量检测&#xff0c;特别是针对高精度要求的印刷产品&#xff0c;如包装材料、标签、书籍封面等&#xff0c;一直是制造业中的一个关键环节。印刷品可能存在的质量问题多种多样&#xff0c;包括但不限于颜色偏差、文字模糊、漏印、多印…...

16、论文阅读:Mamba YOLO:用于目标检测的基于 SSM 的 YOLO

Mamba YOLO: SSMs-Based YOLO For Object Detection 总结前言感受野为什么Transformer 的结构被引入&#xff0c;显著扩展了模型的感受野&#xff1f;状态空间模型SSM 介绍相关工作实时目标检测端到端目标检测器视觉状态空间模型 方法预处理整体架构ODSS BlockLocalSpatial Blo…...

python项目实战---使用图形化界面下载音乐

音乐下载 设计思路&#xff1a; 设计界面编写爬虫代码绑定爬虫打包exe文件 这个是最终的设计成果&#xff0c;所有的下载歌曲都在“下载mp3”文件夹里面 完整代码 逻辑代码 import os.path import reimport requests from PyQt5.QtWidgets import QApplication,QWidget,QM…...

无人机干扰与抗干扰,无人机与反制设备的矛与盾

无人机干扰与抗干扰&#xff0c;以及无人机与反制设备之间的关系&#xff0c;可以形象地比喻为矛与盾的较量。以下是对这两方面的详细探讨&#xff1a; 一、无人机干扰与抗干扰 1. 无人机干扰技术 无人机干扰技术是指通过各种手段对无人机系统进行干扰&#xff0c;使其失去正…...

JAVA基础:单元测试;注解;枚举;网络编程 (学习笔记)

单元测试 操作步骤&#xff1a; a.导包import org.junit; b.三个注解 Test Before After c.点击Test 运行就可以了 用在不需要控制台输入的情境下&#xff1a;javaweb&#xff0c;框架项目&#xff0c;微服务项目 供开发人员自己做测试。 package com.page…...

Meta 上周宣布正式开源小型语言模型 MobileLLM 系列

在 7 月发布之后&#xff0c;Meta 上周宣布正式开源能够在智能手机上运行的小型语言模型 MobileLLM 系列。 Meta 在四个月前发布了这两个参数量小于 10 亿的语言模型 MobileLLM 125M 及 MobileLLM 350M。如今&#xff0c;Meta 又开发出了更大参数量的模型版本&#xff0c;包括…...

安全篇(1)判断安全固件

判断安全固件的方法 一、通过串口开机打印 改方法适用Android与Tina 1.开机打印为SBOOT为安全 [289]HELLO! SBOOT is starting! 2.开机打印boot0为非安全 [88]BOOT0 commit : 1cbb5ea8b3 二、通过读数据 1.getprop | grep verifiedbootstate 这条命令的输出表示设备的…...

ArcGIS005:ArcMap常用操作101-150例动图演示

摘要&#xff1a;本文涵盖了GIS软件操作的多方面内容&#xff0c;包括地图文档的新建、打开、保存及版本兼容性处理&#xff1b;错误与警告的查阅及帮助文档的使用技巧&#xff1b;地图打印比例尺的调整与地图信息的完善&#xff1b;图层操作的撤销与恢复&#xff0c;界面元素的…...

如何用ChatGPT结合Python处理遥感数据

在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专业人士而言&#xff0c;如何高效地处…...

matlab 质心重合法实现点云配准

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、初始位置2、配准结果本文由CSDN点云侠原创,原文链接,首发于:2024年11月5日。 一、算法原理 1、原理概述 质心重合法是将源点云 P P P...

ubuntu双屏只显示一个屏幕另一个黑屏

简洁的结论&#xff1a; 系统环境 ubuntu22.04 nvidia-535解决方案 删除/etc/X11/xorg.conf 文件 记录一下折腾大半天的问题。 ubuntu系统是22.04,之前使用的时候更新驱动导致桌面崩溃&#xff0c;重新安装桌面安装不上&#xff0c;请IT帮忙&#xff0c;IT一番操作过后也表示…...

小菜家教平台:基于SpringBoot+Vue打造一站式学习管理系统

前言 现在已经学习了很多与Java相关的知识&#xff0c;但是迟迟没有进行一个完整的实践&#xff08;之前这个项目开发到一半&#xff0c;很多东西没学搁置了&#xff0c;同时原先的项目中也有很多的问题&#xff09;&#xff0c;所以现在准备从零开始做一个基于SpringBootVue的…...

网络自动化03:简单解释send_config_set方法并举例

目录 拓扑图设备信息 netmiko涉及方法send_config_set()方法的简单示例代码输出结果代码解释导入模块配置信息config_device_interface_description 函数主程序块总结 send_config_set方法参数&#xff1a;1. enter_config_mode2. config_commands3. enter_config_mode4. error…...

千问3.5-2B网页交互教程:上传→提问→获取JSON接口响应,全流程代码实例

千问3.5-2B网页交互教程&#xff1a;上传→提问→获取JSON接口响应&#xff0c;全流程代码实例 1. 快速了解千问3.5-2B 千问3.5-2B是Qwen系列的小型视觉语言模型&#xff0c;它能够同时理解图片和文字。想象一下&#xff0c;你有一个既能看图又能聊天的智能助手——这就是千问…...

【实验原理深度解析】弗兰克-赫兹实验:如何用电子“碰撞”揭示原子能级的秘密

1. 电子与原子的"对话"&#xff1a;弗兰克-赫兹实验的设计哲学 想象你站在一个漆黑的房间里&#xff0c;向对面墙壁投掷网球。如果墙壁是实心的&#xff0c;球会直接弹回&#xff1b;但如果墙上有一排高度不同的窗口&#xff0c;球只有达到特定速度才能穿过对应高度的…...

Nginx + FFmpeg 核心配置

Nginx FFmpeg 核心配置&#xff08;2 种最实用方案&#xff09;我给你最简、能直接用的配置&#xff0c;不用你自己改半天&#xff0c;分两种场景&#xff1a;Nginx 接收 FFmpeg 推流&#xff08;直播&#xff09;Nginx 调用 FFmpeg 自动转码&#xff08;高清 / 标清&#xff…...

JAVA面试-equals与==的本质区别

Java中 与 equals() 的区别是面试和日常开发的核心知识点&#xff0c;其核心差异在于比较的对象&#xff1a; 是比较引用地址或基本类型的值&#xff0c;而 equals() 是比较对象的内容&#xff0c;但其默认行为与重写密切相关 。 为了清晰地理解&#xff0c;我们可以将比较场…...

Precor必确 GLUTEBUILDER 系列,带来系统化臀部训练解决方案

在健身训练不断细分的当下&#xff0c;臀部训练早已不再是“顺带练一练”的附属项目&#xff0c;而是被置于与胸、背、腿同等重要的核心地位。然而&#xff0c;真正高效的臀腿训练&#xff0c;从来不是简单堆叠负重&#xff0c;而是建立在精准发力与动作模式科学之上的系统工程…...

从噪音到宁静:5种高级风扇控制策略深度解析

从噪音到宁静&#xff1a;5种高级风扇控制策略深度解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanContro…...

Android Framework开发工程师深度解析与技术指南

引言 在移动智能设备普及的今天,Android系统作为全球主流的操作系统,其Framework层开发是支撑整个生态的核心。Android Framework开发工程师负责系统架构设计、深度定制与兼容性优化,确保设备高效运行。本文将基于职位描述的核心要素,系统解析Android Framework开发的技术…...

AMD显卡AI部署实战指南:ROCm模型运行与性能优化

AMD显卡AI部署实战指南&#xff1a;ROCm模型运行与性能优化 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/gh_mirrors/ol/ollama-for…...

如何让微信聊天记录永久留存?WeChatMsg为你打造个人数字档案馆

如何让微信聊天记录永久留存&#xff1f;WeChatMsg为你打造个人数字档案馆 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

戴森球计划FactoryBluePrints蓝图库:从新手到专家的终极工厂建设指南

戴森球计划FactoryBluePrints蓝图库&#xff1a;从新手到专家的终极工厂建设指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints蓝图库是戴森球计划游戏…...