Async的线程池使用的哪个?
在Spring框架中,@Async
注解用于实现异步方法的调用。关于@Async
使用的线程池,有以下几点信息:
-
默认线程池:如果项目中没有自定义线程池,Spring Boot 2.2之前的版本默认使用的是
SimpleAsyncTaskExecutor
作为异步任务的执行器。然而,从Spring Boot 2.2开始,默认线程池变为ThreadPoolTaskExecutor
510。 -
自定义线程池:在Spring Boot应用中,可以通过定义一个
TaskExecutor
类型的Bean来自定义异步方法的线程池。例如,在Spring Boot主类中定义一个线程池,使用public Executor customExecutor()
方法来返回自定义的线程池实例1。 -
线程池配置:如果不指定线程池的名称,也就是不自定义线程池,
@Async
会使用默认的线程池。在Spring Boot中,如果没有手动配置任何线程池,Spring Boot会默认添加一个核心线程数为8的无界线程池,名称为applicationTaskExecutor
14。 -
线程池参数:
ThreadPoolTaskExecutor
的默认参数包括核心线程数为8,最大线程数为Integer.MAX_VALUE
,队列使用LinkedBlockingQueue
,容量也是Integer.MAX_VALUE
,空闲线程保留时间为60秒,线程池拒绝策略为AbortPolicy
18。 -
线程池的使用:在Spring中,
@Async
注解可以标注在方法上,使得该方法异步执行。调用者在调用时会立即返回,而方法的实际执行将由Spring TaskExecutor的任务提交给指定的线程池中的线程执行15。
综上所述,@Async
使用的线程池取决于项目中是否有自定义线程池的配置。如果没有自定义配置,Spring Boot 2.2之前的版本会使用SimpleAsyncTaskExecutor
,而2.2及之后的版本会使用ThreadPoolTaskExecutor
作为默认线程池。开发者可以根据项目需求自定义线程池,以优化异步任务的执行效率。
TaskExecutor1 | Spring异步线程池接口 定义异步方法的线程池。 |
ThreadPoolTaskExecutor5 | Spring Boot线程池 从2.1开始使用ThreadPoolTaskExecutor。 |
SimpleAsyncTaskExecutor6 | 默认异步线程池 使用SimpleAsyncTaskExecutor。 |
ThreadPoolTaskExecutor10 | 自定义线程池 项目中自定义ThreadPoolTaskExecutor。 |
applicationTaskExecutor14 | Spring Boot默认线程池 未配置时使用applicationTaskExecutor。 |
ThreadPoolTaskExecutor18 | 默认异步线程池配置 使用ThreadPoolTaskExecutor,核心线程数为8。 |
SimpleAsyncTaskExecutor1 | 默认线程池 在Spring Boot中,如果不自定义异步方法的线程池,默认使用SimpleAsyncTaskExecutor。 |
ThreadPoolTaskExecutor5 | Spring Boot线程池 自2.1版本起,Spring Boot使用的是ThreadPoolTaskExecutor线程池。 |
applicationTaskExecutor14 | 默认线程池配置 若未手动配置线程池,Spring Boot默认添加coreSize=8的无界线程池,名称为applicationTaskExecutor。 |
TaskExecutor1 | Spring异步线程池接口 用于定义通用线程池,处理异步方法的执行。 |
ThreadPoolTaskExecutor5 | Spring Boot线程池 自2.1版本起,Spring Boot使用的线程池类型。 |
SimpleAsyncTaskExecutor10 | 默认异步线程池 在未自定义线程池时,Spring中使用的简单异步任务执行器。 |
applicationTaskExecutor14 | Spring Boot默认线程池 若项目中未配置线程池,Spring Boot会使用此线程池。 |