在 Spring Boot 中,@Async
使用的默认线程池核心线程数参数为 8。这是由 Spring Boot 的自动配置类 TaskExecutionAutoConfiguration
决定的,其默认参数如下:
默认线程池参数
- 核心线程数(core-size): 8
- 最大线程数(max-size):
Integer.MAX_VALUE
(即无限制扩展) - 队列容量(queue-capacity):
Integer.MAX_VALUE
(使用无界队列LinkedBlockingQueue
) - 空闲线程保留时间(keep-alive): 60 秒
- 拒绝策略(rejection-policy):
AbortPolicy
(直接抛出异常)
注意事项
- 线程池类型:
在 Spring Boot 中,默认线程池是ThreadPoolTaskExecutor
,而非早期 Spring 原生框架中的SimpleAsyncTaskExecutor
。后者仅在未正确配置或关闭自动配置时(如手动禁用
spring.task.execution.enabled
)才会被使用。 - 潜在问题:
默认配置的max-size
和queue-capacity
参数设置为极大值,可能导致高并发场景下线程数激增,引发资源耗尽(如 OOM)。建议通过配置文件或自定义线程池优化参数。
如何验证默认参数?
可通过调试源码中的 TaskExecutionProperties
类(属于 org.springframework.boot.autoconfigure.task
包)查看默认值,或直接打印线程池实例的属性。
自定义配置示例
若需调整参数,可在 application.yml
中覆盖默认值:
yaml
spring:
task:
execution:
pool:
core-size: 3 # 核心线程数
max-size: 6 # 最大线程数
queue-capacity: 1000
keep-alive: 3s
thread-name-prefix: my-thread-
此时,异步任务将使用调整后的线程池。
总结
Spring Boot 的默认线程池参数设计偏向“保守可用但非生产推荐”,开发者应根据实际并发需求显式配置线程池,避免依赖默认值。