@Configuration
//开启异步任务的支持
@EnableAsync
public class TaskExecutorConfig {
@Bean(name = "businessEventProcessTaskExecutor", destroyMethod = "destroy")
public ThreadPoolTaskExecutor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 获取JAVA虚拟机的可用处理器数量。IO密集型建议核心线程数是该值2倍;计算密集型建议核心线程数是该值1倍
int processorNum = Runtime.getRuntime().availableProcessors();
// 设置核心线程数量。若池中的实际线程数小于该值,无论其中是否有空闲的线程,都会产生新的线程
executor.setCorePoolSize(processorNum * 2);
// 设置最大线程数量
executor.setMaxPoolSize(processorNum * 4);
// 设置阻塞任务队列大小
executor.setQueueCapacity(100);
// 线程名称前缀
executor.setThreadNamePrefix("ThreadNamePrefix-");
// 设置线程池中任务的等待时间,若超过等待时间仍未销毁则强制销毁,以确保应用最后能够被关闭,而不是阻塞住
executor.setAwaitTerminationSeconds(1);
// 设置拒绝策略,当线程池阻塞队列已满时对新任务的处理。调节机制,即饱和时回退主线程执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}