
【SpringBoot】多线程 @EnableAsync @Async
注入任务类:使用 调用异步任务:在需要的方法中调用任务类的异步方法,避免阻塞当前线程。
发布日期:2021-05-12 22:13:25
浏览次数:12
分类:精选文章
本文共 1057 字,大约阅读时间需要 3 分钟。
在 Spring 应用中,通过异步任务实现多线程处理,能够有效提升程序的性能和响应速度。以下将详细介绍如何在 Spring 中配置并使用异步线程池,以及如何编写和调用相关的异步任务。
一、配置异步线程池
为了实现异步执行任务,我们需要在 Spring 应用中配置一个 thread pool。具体步骤如下:
创建配置类:实现 AsyncConfigurer
接口,并使用 @EnableAsync
注解标记支持异步任务。
定义线程池配置:在 getAsyncExecutor()
方法中,创建 ThreadPoolTaskExecutor
实例,并根据需要配置线程池的参数:
- 核心线程数:默认为空,可根据项目需求手动设置,建议设置为
Runtime.getRuntime().availableProcessors()
的值。 - 最大线程数:建议设置为核心线程数的 5 倍,以应对峰值负载。
- 队列容量:设置为核心线程数的 2 倍,确保线程池在高负载时不会堆积过多任务。
- 线程名称前缀:自定义线程名称,方便日志和 debugging。
- 拒绝策略:默认为
CallerRunsPolicy
,即当线程池已满时,新任务由当前线程执行。
异常处理:通过返回一个 SimpleAsyncUncaughtExceptionHandler
实例,配置异步任务中的异常处理逻辑。
二、编写异步线程任务
在编写异步任务类时,使用 @Async
注解标记方法为异步执行。这些任务将由配置的线程池自动执行,不会阻塞当前线程。
创建线程任务类:
注入依赖类:确保任务类中的要用到 Spring 组件(如 service 层的业务逻辑)。
定义异步方法:使用 @Async
注解的方法将被异步执行。
三、调用异步任务
在需要执行异步操作的控制层或 service 层,注入任务类的依赖,并调用其方法。
@Autowired
将线程任务类注入进来。四、测试与验证
启动应用程序后,访问相关路由(如 /startMysync
),查看控制台输出以确认异步任务是否正常执行。
五、典型应用场景
异步任务在现代 web 应用中具有广泛应用:
- 处理高并发的 HTTP 请求。
- 执行对第三方服务或者数据库的复杂操作,避免阻塞主线程。
- 执行时间庞大的计算任务,优化用户体验。
通过以上配置和使用方法,可以有效地在 Spring 应用中实现异步任务,提升系统性能和用户体验。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月29日 23时42分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CSS入门总结
2019-03-06
使用 TortoiseGit 时,报 Access denied 错误
2019-03-06
基于 HTML5 WebGL 的污水处理厂泵站自控系统
2019-03-06
[系列] Go gRPC 调试工具
2019-03-06
django-表单之模型表单渲染(六)
2019-03-06
c++之程序流程控制
2019-03-06
一位年轻而优秀的.NET开发者的成长点滴
2019-03-06
如何使用ABP进行软件开发(1) 基础概览
2019-03-06
AlwaysOn配置时在连接步骤时报错(35250)
2019-03-06
排序算法之总结
2019-03-06
微软云Linux服务器 Mysql、tomcat远程连接错误解决办法
2019-03-06
Python数据分析(二): Numpy技巧 (2/4)
2019-03-06
09 . Python3之常用模块
2019-03-06
Python学习笔记-StatsModels 统计回归(3)模型数据的准备
2019-03-06
Velocity.js初步
2019-03-06
nginx上配置phpmyadmin
2019-03-06
HustOJ二次开发之修改数据库连接池
2019-03-06
一个JAVA应用启动缓慢问题排查 --来自jdk securerandom 的问候
2019-03-06