@Async用哪个线程池

一共可以分三种情况

第一种

未在手动在项目中配置任何线程池
spring boot 会默认添加一个coreSize=8的 无界线程池,名称为applicationTaskExecutor (源码:org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration)
这时使用@Async注解使用的就是applicationTaskExecutor线程池

第二种

在项目配置了线程池,但是只有一个
例如,我在项目中配置了一个名为 myThreadPool的线程池
这时使用@Async注解使用的就是myThreadPool线程池

第三种

在项目配置了线程池且有多个
例如,我在项目中配置了 myThreadPool1 、myThreadPool2 等若干个线程池
这时使用@Async注解,如果不指定使用哪个线程池,默认使用的就是SimpleAsyncTaskExecutor
SimpleAsyncTaskExecutor是 为每个任务启动一个新线程,异步执行。支持通过“concurrentyLimit”bean属性限制并发线程。默认情况下,并发线程的数量是无限的。

你可能感兴趣的:(java)