1.为什么要给@Async自定义线程池
@Async注解,在默认情况用的是SimpleAsyncTaskExecutor线程池,该线程池不会重用,每次调用都会新建一条现场。在日志输出查看,每次打印的线程名都是【task-1】,【task-2】…递增的。
- SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。
- SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作。只适用于不需要多线程的地方
- ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类
- SimpleThreadPoolTaskExecutor:是Quartz的SimpleThreadPool的类。线程池同时被quartz和非quartz使用,才需要使用此类
- ThreadPoolTaskExecutor :最常使用,推荐。 其实质是对java.util.concurrent.ThreadPoolExecutor的包装
2.为@Async自定义一个线程池,配置线程池
@Configuration
@EnableAsync
public class SyncConfiguration {
@Bean(name =