SpringBoot中多类使用同@Async线程池是否会重复创建或拆分资源?
Spring
@Async注解复用同名称线程池的行为说明 核心结论
- 不会创建两个独立的线程池,你配置的500线程容量不会变成1000,总大小保持原配置值
- 两个标注了
@Async(value="pool_1")的类会共享该线程池的所有线程,不会拆分配额分别给两个类单独使用
原理说明
你提前配置好的名称为pool_1的线程池是Spring容器托管的单例Bean,全局唯一。@Async注解的value参数仅用于指定异步任务要使用的线程池Bean名称,本身没有创建线程池的能力,仅做任务执行器的路由选择。
不管你在多少个类、多少个方法上标注@Async(value="pool_1"),只要指向的是同一个线程池Bean名称,所有异步任务都会提交到同一个线程池实例中执行。
验证方法
你可以在两个类的异步方法中打印线程池实例的哈希值,或者调用线程池的getActiveCount()、getMaximumPoolSize()方法查看运行时参数,就能确认是同一个实例,且两个类的任务会共同占用线程池的配额。
内容的提问来源于stack exchange,提问作者shubham sharma
相关产品推荐
相关产品推荐

