ThreadPoolTaskExecutor
和ThreadPoolExecutor
两个类都是作为线程池的作用,最本质的区别来自于:ThreadPoolExecutor
是在java.util.concurrent
包下;ThreadPoolTaskExecutor
是在org.springframework.scheduling.concurrent
包下。
分析两个类的继承关系
ThreadPoolTaskExecutor
1 | public class ThreadPoolTaskExecutor extends ExecutorConfigurationSupport |
ThreadPoolExecutor
1 | public class ThreadPoolExecutor extends AbstractExecutorService { |
从上继承关系可知:ThreadPoolExecutor
是一个java类,不提供spring生命周期和参数装配。ThreadPoolTaskExecutor
实现了InitializingBean, DisposableBean ,xxaware等,具有spring特性。AsyncListenableTaskExecutor
提供了监听任务方法(相当于添加一个任务监听,提交任务完成都会回调该方法)。
简单理解:
- ThreadPoolTaskExecutor内部封装了ThreadPoolExecutor并进行了增强,扩展了更多特性。
- ThreadPoolTaskExecutor只关注自己增强的部分,任务执行还是ThreadPoolExecutor处理。
- 前者spring自己用着爽,后者离开spring我们用ThreadPoolExecutor爽。
注意:ThreadPoolTaskExecutor
不会自动创建ThreadPoolExecutor
需要手动调initialize()
方法才会创建; 如果使用@Bean
注解注入就不需手动,会自动调用InitializingBean
的afterPropertiesSet()方法
来调initialize()
。