spring 開啟@EnableAsync


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM