SpringBoot Async异步调用/线程池
1. 概念:
同步调用:程序按定义的顺序依次执行的过程,每一行代码执行过程必须等待上一行代码执行完毕后才执行;
异步调用:不用等待结果的返回就执行后面的逻辑;
比较:同步有依赖相关性,而异步没有,所以异步可并发
执行,可提高执行效率,在相同的时间做更多的事情。
2. @Async、@EnableAsync注解
3. 自定义线程池
A. Spring默认的线程池simpleAsyncTaskExecutor,但是实际使用ThreadPoolTaskExecutor类来创建线程池;
B. 示例

package com.ruhuanxingyun.config; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; /** * @description: 线程池配置 * @author: 如幻行云 * @date: Create in 2019/6/26 9:27 */ @Configuration @EnableAsync public class ThreadPoolConfig implements AsyncConfigurer { /** * 核心线程数 */ private static final int CORE_POOL_SIZE = 20; /** * 队列容量 */ private static final int QUEUE_CAPACITY = 1000; /** * 最大线程数 */ private static final int MAX_POOL_SIZE = 50; /** * 线程活跃时间(秒) */ private static final int KEEP_ALIVE_SECONDS = 300; @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); threadPoolTaskExecutor.setCorePoolSize(CORE_POOL_SIZE); threadPoolTaskExecutor.setQueueCapacity(QUEUE_CAPACITY); threadPoolTaskExecutor.setMaxPoolSize(MAX_POOL_SIZE); threadPoolTaskExecutor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS); // 设置拒接策略 threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 设置线程名称前缀 threadPoolTaskExecutor.setThreadNamePrefix("thread-pool-config-"); // 执行初始化 threadPoolTaskExecutor.initialize(); return threadPoolTaskExecutor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return null; } }
4. 异步回调结果
可参考:https://blog.lqdev.cn/2018/08/17/springboot/chapter-twenty-one/
分类:
SpringBoot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗