@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; } }