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

讲讲springboot的@Async

Spring Boot的@Async注解用于表示一个方法是异步的,即该方法可以在一个独立的线程中执行,而不会阻塞当前线程。这对于处理一些耗时的操作非常有用,如发送电子邮件、生成报表、处理文件上传等。使用@Async注解可以提高应用程序的响应性和性能。

下面是使用@Async注解的一般步骤:

  1. 在Spring Boot应用程序的配置类上添加@EnableAsync注解,以启用异步方法的支持。这通常是在应用程序的主配置类上完成的。
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAsync
public class AsyncConfig {
    // 其他配置
}
  1. 在需要异步执行的方法上添加@Async注解。这个方法可以是在Spring Bean中定义的,也可以是在普通的类中定义的,只要它被Spring容器管理。
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    @Async
    public void asyncMethod() {
        // 异步执行的代码
    }
}
  1. 调用带有@Async注解的方法时,Spring会自动创建一个新的线程来执行该方法,而不会阻塞调用线程。
@Service
public class MyOtherService {

    @Autowired
    private MyService myService;

    public void doSomething() {
        // 调用异步方法
        myService.asyncMethod();

        // 继续执行其他操作,不会等待异步方法的完成
    }
}

为什么要给@Async自定义线程池?
使用@Async注解,在默认情况下用的是SimpleAsyncTaskExecutor线程池,该线程池不是真正意义上的线程池。
使用此线程池无法实现线程重用,每次调用都会新建一条线程。若系统中不断的创建线程,最终会导致系统占用内存过高,引发OutOfMemoryError错误

你可以在应用程序的配置中自定义线程池的属性,如最大线程数、队列大小等。

# application.properties
spring.task.execution.pool.core-size=10
spring.task.execution.pool.max-size=20

相关文章:

  • 王杰国庆作业day6
  • 打开MySQL数据库
  • 解决WPF+Avalonia在openKylin系统下默认字体问题
  • 【visual studio 小技巧】项目属性->生成->事件
  • C++笔记之不同buffer数量下的生产者-消费者机制
  • Qt扩展-QCustomPlot 用户交互
  • 学习开发一个RISC-V上的操作系统(汪辰老师) — unrecognized opcode `csrr t0,mhartid‘报错问题
  • 代码随想录算法训练营第42天|动态规划:01背包理论基础、动态规划:01背包理论基础(滚动数组)、416. 分割等和子集
  • OpenGLES:绘制一个混色旋转的3D圆柱
  • java导出word(含图片、表格)
  • FFmpeg:打印音/视频信息(Meta信息)
  • B树和B+树的介绍和对比,以及MySQL为何选择B+树
  • AS环境,版本问题,android开发布局知识
  • ROS2 库包设置和使用 Catch2 进行单元测试
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-2】语言模型,提问范式与 Token
  • 新款UI动态壁纸头像潮图小程序源码
  • Python安装指南:安装Python、配置Python环境(附安装包)
  • 华为云云耀云服务器L实例评测|部署个人音乐流媒体服务器 navidrome
  • AWS Lambda Golang HelloWorld 快速入门
  • Mac上如何修复损坏的音频?试试iZotope RX 10,对音频进行处理,提高音频质量!
  • 台行政机构网站删除“汉人”改为“其余人口”,国台办回应
  • 重庆发布经济犯罪案件接报警电子地图,企业可查询导航属地经侦服务点
  • 中保协发布《保险机构适老服务规范》,全面规范保险机构面向老年人提供服务的统一标准
  • 通化市委书记孙简升任吉林省副省长
  • 教育部基础教育教指委:稳步推进中小学人工智能通识教育
  • 匈牙利史专家阚思静逝世,享年87岁