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

Springboot之@Async异步指定自定义线程池使用

开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑,比如消息推送、商品同步等都可以使用异步方法,这时我们可以用到@Async。但是直接使用 @Async 会有风险,当我们没有指定线程池时,他会默认使用其Spring自带的 SimpleAsyncTaskExecutor 线程池,会不断的创建线程,当并发大的时候会严重影响性能。所以可以将异步指定线程池使用。

@Async用法:可以标注在类或方法上,用于实现方法的异步执行。当被标注在类上时,表明类中的所有方法都被指定的异步执行器执行。

一、开启异步

启动类添加@EnableAsync开启异步

@EnableAsync
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

二、配置线程池

可以在yml里配置,我这里写的配置类

@EnableAsync
@Configuration
public class ThreadPoolConfig {/*** 线程池任务执行器* @return*/@Beanpublic Executor taskExecutor() {// 创建线程池ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5); // 设置核心池大小executor.setMaxPoolSize(10); // 设置最大池大小,只有在缓冲队列满了之后才会申请超过核心线程数的线程executor.setQueueCapacity(100); // 设置队列容量executor.setKeepAliveSeconds(60); // 设置保持活动秒数,当超过了核心线程数之外的线程在空闲时间到达之后会被销毁executor.setThreadNamePrefix("开始啦Thread-"); // 设置线程名称前缀// 设置拒绝的执行处理策略executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}
}

拒绝策略通常有四种:

  1. ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
  2. ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
  3. ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
  4. ThreadPoolExecutor.CallerRunsPolicy:重试添加当前的任务,自动重复调用 execute() 方法,直到成功

注:配置类需要加上@EnableAsync,开启异步可用

三、Async指定线程池

在@Async注解中直接指定线程池名称即可

	@Async("taskExecutor")public void asyncDemo() {// 逻辑代码...}

四、@Async失效可能原因

  1. 启动类或线程池配置类没加@EnableAsync注解
  2. 调用方法和@Async方法不要在一个类中
  3. @Async方法的返回值只能是void和Future
  4. @Async修饰的方法不能被static修饰
  5. @Async修饰的的方法必须是public

题外话,之前面试有问到过异步线程池的大小怎么合理来设置,感兴趣的小伙伴们可以去研究一下哈

相关文章:

Springboot之@Async异步指定自定义线程池使用

开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑,比如消息推送、商品同步等都可以使用异步方法,这时我们可以用到Async。但是直接使用 Async 会有风险,当我们没有指定线程池时,他会默认使用其Spring自带的 SimpleAsync…...

视频知识点(23)- TS格式详解指南

*《音视频开发》系列-总览*(点我) 一、格式简介 TS视频封装格式,是一种被广泛应用的多媒体文件格式。它的全称是MPEG2-TS,其中TS是“Transport Stream”的缩写。TS(Transport Stream)流是一种传输流,它由固定长度(188 字节)的 TS 包组成,TS 包是对PES包的一种封装方式…...

linux篇【16】:传输层协议<后序>

目录 六.滑动窗口 (1)发送缓冲区结构 (2)滑动窗口介绍 (3)滑动窗口不一定只会向右移动。滑动窗口可以变大也可以变小。 (4)那么如果出现了丢包, 如何进行重传? 这里分两种情况…...

【C语言】动态内存管理

一.为什么存在动态内存分配? 我们已经掌握的内存开辟方式有:int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 但是上述的开辟空间的方式有两个特点: 1. 空间开辟大小是固定的。 2. 数组在申明的…...

【Pytorch】AutoGrad个人理解

前提知识:[Pytorch] 前向传播和反向传播示例_友人小A的博客-CSDN博客 目录 简介 叶子节点 Tensor AutoGrad Functions 简介 torch.autograd是PyTorch的自动微分引擎(自动求导),为神经网络训练提供动力。torch.autograd需要对…...

华硕z790让独显和集显同时工作

系统用了一段时间,现在想让显卡主要做深度学习训练,集显用来连接显示器。却发现显示器接到集显接口无信号。 打售后客服也没有解决,现在把解决方案记录一下。 这是客服给的方案: 请开机后进BIOS---Advanced---System Agent (SA)…...

提高编程思维的python代码

1.通过函数取差。举例:返回有差别的列表元素 from math import floordef difference_by(a,b,fn):b set(map(fn, b))return [i for i in a if fn(i) not in b] print(difference_by([2.1, 1.2], [2.3, 3.4], floor))2.一行代码调用多个函数 def add(a, b):return …...

CSS背景background属性整理

1.background-color background-color属性:设置元素的背景颜色 2.background-position background-position属性:设置背景图像的起始位置,需要把 background-attachment 属性设置为 "fixed",才能保证该属性在 Firefo…...

AQS底层源码深度剖析-Lock锁

目录 AQS底层源码深度剖析-Lock锁 ReentrantLock底层原理 为什么把获取锁失败的线程加入到阻塞队列中,而不是采取其它方法? 总结:三大核心原理 CAS是啥? 代码模拟一个CAS: 公平锁与非公平锁 可重入锁的应用场景&…...

网络编程(二)

6. TCP 三次握手四次挥手 HTTP 协议是 Hype Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器(sever)传输超文本到客户端(本地浏览器…...

访问学者进入美国哪些东西不能带?

随着疫情的稳定,各国签证的逐步放开,成功申请到国外访问学者、博士后如何顺利的进入国外,哪些东西不能带,下面就随知识人网小编一起看一看。一、畜禽肉类(Meats, Livestock and Poultry)不论是新鲜的、干燥的、罐头的、真空包装的…...

灵巧手抓持<分类><仿真>

获取灵巧手抓取物体时的抓持类型,需要考虑:手本身的结构、被抓取物体的形状尺寸、抓持操作任务的条件。 研究方法:基于模型的方法、基于数据驱动的方法 基于模型的方法:建立灵巧手抓持相关的运动学和动力学模型建立目标函数求解…...

CENTO OS上的网络安全工具(十九)ClickHouse集群部署

一、VMware上集群部署ClickHouse (一)网络设置 1. 通过修改文件设置网络参数 (1)CentOS 在CENTOS上的网络安全工具(十六)容器特色的Linux操作_lhyzws的博客-CSDN博客中我们提到过可以使用更改配置文件的方式…...

tesseract -图像识别

下载链接:https://digi.bib.uni-mannheim.de/tesseract/如下选择最新的版本,这里我选择tesseract-ocr-w64-setup-5.3.0.20221222.exe有如下python模块操作tesseractpyocr 国内源:pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ py…...

JavaScript Math 算数对象

文章目录JavaScript Math 算数对象Math 对象Math 对象属性Math 对象方法算数值算数方法JavaScript Math 算数对象 Math(算数)对象的作用是:执行常见的算数任务。 Math 对象 Math(算数)对象的作用是:执行普…...

一体机HDATA节点添加和删除

瀚高数据库 目录 文档用途 详细信息 文档用途 一体机可在线添加、删除数据库集群节点。 详细信息 一体机可在线添加、删除数据库集群节点。具体操作步骤如下 一、节点添加 集群可以在其他机器上通过配置hghac.yaml文件,将新节点加入集群。 集群操作 1&#xf…...

关于 interface{} 会有啥注意事项?上

学习 golang ,对于 interface{} 接口类型,我们一定绕不过,咱们一起来看看 使用 interface{} 的时候,都有哪些注意事项吧 interface {} 可以用于模拟多态 xdm 咱们写一个简单的例子,就举动物的例子 写一个 Animal 的…...

Matlab中旧版modem.qammod与新版不兼容

最近,因为课题需要,在研究通信。在网上下了一个2015年左右的代码,其中用的是matlab旧版中的modem.qammod函数,但是旧版中的函数已经被删除了,(这里必须得吐槽一下,直接该函数内部运行机制就行呀…...

通达信指标公式颜色代码的四种写法(COLOR/RGB)

通达信指标公式颜色代码有四种写法,分别为COLOR颜色的英文、COLOR十六进制、RGBX十六进制、RGB(R,G,B)。标题有点尴尬,让我想到孔乙己“茴”字的四种写法,哈哈。 一、COLOR颜色的英文 “COLOR颜色的英文”这种写法比较简单,函数库…...

小程序面试题收集(持续更新中...)

小程序面试题收集 1.请谈谈微信小程序主要目录和文件的作用 project.config.json:项目配置文件,用的最多的就是配置是否开启https校验App.js:设置一些全局的基础数据等App.json:底部tab,标题栏和路由等设置App.wxss&…...

UnrealPakViewer工具解析:UE4资源管理的可视化解决方案

UnrealPakViewer工具解析:UE4资源管理的可视化解决方案 【免费下载链接】UnrealPakViewer 查看 UE4 Pak 文件的图形化工具,支持 UE4 pak/ucas 文件 项目地址: https://gitcode.com/gh_mirrors/un/UnrealPakViewer UnrealPakViewer是一款专为UE4开…...

轴,V带轮,斜齿轮,丝杠零件图CAD图纸

轴作为机械系统中的核心传动部件,承担着传递扭矩与支撑旋转的重要功能。其设计需综合考虑材料强度、刚度及热处理工艺,以确保在复杂载荷下保持稳定运行。典型结构包含阶梯轴、空心轴等类型,通过优化轴肩定位与键槽布局,可有效提升…...

Realistic Vision V5.1虚拟摄影棚教程:负向提示词组合策略与失效排查

Realistic Vision V5.1虚拟摄影棚教程:负向提示词组合策略与失效排查 你是不是也遇到过这样的情况:用Realistic Vision V5.1生成的人像,明明提示词写得很好,但出来的照片总有些不对劲——手指扭曲得像外星人,脸部细节…...

全域软开关直流变换器TPEL论文仿真复现之旅

全域软开关直流变换器 TPEL论文仿真复现最近一头扎进了全域软开关直流变换器的研究里,主要在琢磨TPEL论文相关内容,那仿真复现就成了关键任务。今天就来和大家唠唠这个过程中的酸甜苦辣。 一、全域软开关直流变换器是啥? 简单来说&#xff0c…...

突破学术排版瓶颈:mpMath插件的4大技术解决方案

突破学术排版瓶颈:mpMath插件的4大技术解决方案 【免费下载链接】mpMath 项目地址: https://gitcode.com/gh_mirrors/mpma/mpMath 当物理系研究生小林在微信公众号编辑器中第12次尝试插入傅里叶变换公式时,屏幕上依然是一堆错位的希腊字母——这…...

N_m3u8DL-RE流媒体下载器:多协议解析技术突破与下载效率提升

N_m3u8DL-RE流媒体下载器:多协议解析技术突破与下载效率提升 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器,支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8D…...

别光看论文!手把手带你复现CVPR 2025扩散模型加速新星:TinyFusion与DiG的代码实战

别光看论文!手把手带你复现CVPR 2025扩散模型加速新星:TinyFusion与DiG的代码实战 如果你已经厌倦了在arXiv上收藏一堆永远打不开第二次的论文链接,或是被那些充满数学符号却缺少可运行代码的"理论创新"搞得头大,那么这…...

告别裸机UI!用LVGL 8.3给你的STM32项目做个漂亮界面(基于HAL库和SPI屏)

从零打造STM32智能界面:LVGL 8.3实战指南 在嵌入式开发领域,用户界面往往是最容易被忽视却最能直接影响用户体验的环节。想象一下,当你精心设计的智能家居控制面板或工业仪表,因为简陋的字符界面而显得廉价时,那种挫败…...

别再让DeepSeek-R1的<think>标签刷屏了!手把手教你用API和Python脚本一键隐藏思考过程

高效隐藏DeepSeek-R1思考过程的工程实践 当你在深夜调试一个集成DeepSeek-R1的客服系统时&#xff0c;终端突然被满屏的<think>标签刷爆——这种场景对开发者来说再熟悉不过了。作为一款强调推理过程的大语言模型&#xff0c;DeepSeek-R1默认会在输出中包含详细的思考步骤…...

如何用XUnity.AutoTranslator实现Unity游戏实时翻译?3大核心优势与5步落地指南

如何用XUnity.AutoTranslator实现Unity游戏实时翻译&#xff1f;3大核心优势与5步落地指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因语言障碍错失精彩的Unity游戏内容&#xff1f;XUnity…...