首页 > 其他分享 >@Async总结

@Async总结

时间:2023-12-13 13:46:43浏览次数:25  
标签:总结 异步 自定义 线程 注解 Async 方法

使用场景:
开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑,比如消息推送、商品同步等都可以使用异步方法,这时我们可以用到@Async。但是直接使用 @Async 会有风险,当我们没有指定线程池时,他会默认使用其Spring自带的 SimpleAsyncTaskExecutor 线程池,会不断的创建线程,当并发大的时候会严重影响性能。所以可以将异步指定线程池使用
简介:
@Async是Spring的注解,可以加在类或方法上。通俗的来讲,如果加上了这个注解,那么该类或者该方法在使用时将会进行异步处理,也就是创建一个线程来实现这个类或者方法,实现多线程。
线程池的执行顺序:

两种使用方式:
第一种:
使用的是Spring默认的线程池SimpleAsyncTaskExecutor。
接入步骤:
1.需要在@SpringBootApplication启动类或者@configure注解类上 添加注解@EnableAsync启动多线程注解。
2.在需要异步执行的方法上添加@Async注解。
默认的线程池配置:

如果需要修改默认的配置可以在yaml或者properties中添加,修改默认配置:

执行后会打印出你的执行线程名称:

第二种:(推荐使用)
自定义线程池,执行异步。
自定义线程池有如下模式,我们只介绍最后一种:

  • 重新实现接口AsyncConfigurer;
  • 继承AsyncConfigurerSupport;
  • 配置由自定义的TaskExecutor替代内置的任务执行器。

然后添加注解到对应的方法上并指定线程池:asyncExecutor

指定线程池的名称为自定义的线程池名称。
查看日志:

注意事项:
查到了@Async失效的几个原因:

  • 注解@Async的方法不是public方法;
  • 注解@Async的返回值只能为void或Future;
  • 注解@Async方法使用static修饰也会失效;
  • 启动类没加@EnableAsync注解;
  • 调用方和@Async不能在一个类中;
  • 在Async方法上标注@Transactional是没用的,但在Async方法调用的方法上标注@Transcational是有效的;

 

标签:总结,异步,自定义,线程,注解,Async,方法
From: https://www.cnblogs.com/jelly12345/p/17898852.html

相关文章

  • mysql花式操作数据小技巧总结
    mysql花式操作数据小结本文是一片关于一些mysql小技巧的总结。主要内容包括:字段中包含多值、基于字段中某个值查询、基于身份证设置性别、身份证生成出生日期、增加表字段、一次搞定多个查询、关联删除、通过关系表一对多查询合并到一条记录、替代like1.字段中包含多值字段为cro......
  • Vue3 setup 方法的一些基本使用总结
    官网介绍:https://cn.vuejs.org/api/composition-api-setup.html基本使用setup()钩子是在组件中使用组合式API的入口,通常只在以下情况下使用:需要在非单文件组件中使用组合式API时。需要在基于选项式API的组件中集成基于组合式API的代码时。setup方法返回值:返回一......
  • 迭代器失效问题总结
    关于迭代器失效,,今天做一个总结。迭代器失效分三种情况考虑,也是三种数据结构考虑,分别为数组型,链表型,树型数据结构。1、对于序列式容器,比如vector,删除当前的iterator会使后面所有元素的iterator都失效。举例如下:voidvectorTest(){vector<int>v;for(inti=0;i<10;i+......
  • Oracle EBS 寄售业务总结
    来源:OracleEBS寄售业务总结_51CTO博客_oracleebs总述:须通过一揽子采购协议(BPA)明确采购方与供应商之间的寄售关系,及各种协议条款;通过来源补充规则(SourcingRules)明确物料的供应商以及分配规则;通过合格供应商列表(ASL)明确物料与供应商、供应商地点以及BPA之间的关系,界定该物......
  • 总结
    #@layout()#definemain()<fieldsetclass="layui-elem-fieldlayui-field-title"style="margin-top:20px;"><legend>学生添加</legend></fieldset><formclass="layui-form"action="/student/save&qu......
  • 后端技术:asyncio异步编程
    异步的作用:异步非阻塞、asyncio详解如框架tornado、fastapi、django>=3.xasgi、aiohttp都是在用异步,异步可以提升性能笔记框架:协程--理论asyncio模块进行异步编程--理论实战代码1.协程协程是人为创造,不是计算机提供。就是用一个线程让代码切换运行协程(Corou......
  • 2023年奔走的总结---吉特日化MES 智能搬运AGV 篇三
    《2023年奔走的总结---吉特日化MES项目趣事篇一》《2023年奔走的总结---吉特日化MES制药项目篇二》《2023年奔走的总结---吉特日化MES智能搬运AGV篇三》上篇文章写到了今年关于制药医疗器械相关的项目,本篇文章将重点总结一下今年遇到的A......
  • 访问控制学习总结
    访问控制是信息安全的重要组成部分,它确保了系统资源只能被授权的用户访问。基于角色的访问控制(RBAC)是一种常见的访问控制策略,它将权限与角色关联,然后将角色分配给用户。以下是关于如何实现基于角色的访问控制的详细步骤:1.设计角色:根据系统需求和业务场景,设计一系列角色。例如,在......
  • 12.12每日总结
    今日重点学习英语一套试卷拿了阅读150分大数据实验二勉强写完实验二:熟悉常用的HDFS操作_hdfs编程实践实验报告-CSDN博客1大学英语四级作文引出开头的亮点句型1:Itiswell-knowntousthat……(我们都知道……)==Asfarasmyknowledgeisconcerned,…(就我所知…)2:Recentlyt......
  • 12.12每日总结
    今天继续了昨天未完成的软件案例分析大作业importokhttp3.*;importorg.json.JSONArray;importorg.json.JSONObject;importjava.io.IOException;importjava.util.Scanner;classSample{publicstaticfinalStringAPI_KEY="h1Hn3oHAWMObDjjFGUY9a2sP";......