ThreadPoolTaskExecutor是一个spring的线程池技术,它是使用jdk中的java.util.concurrent.ThreadPoolExecutor进行实现。
配置
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
// 线程池维护线程的最少数量
pool.setCorePoolSize(5);
// 线程池维护线程的最大数量
pool.setMaxPoolSize(2000);
// 当调度器shutdown被调用时等待当前被调度的任务完成
pool.setWaitForTasksToCompleteOnShutdown(true);
return pool;
}
常用方法
- 无返回值的任务使用execute(Runnable)
- 有返回值的任务使用submit(Runnable)
方法执行
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
taskExecutor.execute(new Runnable() {
@Override
public void run() {
try {
// logger.info("执行线程!");
} catch (Exception e) {
logger.error("", e);
throw new RuntimeException(e);
}
}
});
// 无返回值,在定时器中可能出现子线程卡死的情况
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
Future<CustomBean> future = taskExecutor.submit(new Callable<CustomBean>() {
@Override
public SimpleResponse call() throws Exception {
// logger.info("执行线程!");
return obj;
}
});
// 线程阻塞等待30s,返回obj
CustomBean obj = future.get(30, TimeUnit.SECONDS);
// 返回obj,超时抛出异常