Spring Boot配置公共的線程池


    內存資源很寶貴,線程池資源不宜過多的創建,同一個應用,盡量使用統一的線程池,並且相關參數需要設置適當,不造成資源的浪費,也不影響性能的提升。

import java.util.concurrent.ThreadPoolExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

/**
 * @author 
 * @date 2019/5/21
 */
@Configuration
public class ThreadPoolConfig {
    @Value("thread.pool.core.pool.size:10")
    private int threadPoolCorePoolSize;
    @Value("thread.pool.max.pool.size:50")
    private int threadPoolMaxPoolSize;
    @Value("thread.pool.queue.capacity:50")
    private int threadPoolQueueCapacity;
    @Value("thread.pool.keep.alive.seconds:300")
    private int threadPoolKeepAliveSeconds;

    @Primary
    @Bean
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        /** 核心線程數,默認為1 **/
        threadPoolTaskExecutor.setCorePoolSize(threadPoolCorePoolSize);
        /** 最大線程數,默認為Integer.MAX_VALUE **/
        threadPoolTaskExecutor.setMaxPoolSize(threadPoolMaxPoolSize);
        /** 隊列最大長度,一般需要設置值: 大於等於notifyScheduledMainExecutor.maxNum;默認為Integer.MAX_VALUE **/
        threadPoolTaskExecutor.setQueueCapacity(threadPoolQueueCapacity);
        /** 線程池維護線程所允許的空閑時間,默認為60s **/
        threadPoolTaskExecutor.setKeepAliveSeconds(threadPoolKeepAliveSeconds);
        /**
         * 線程池對拒絕任務(無線程可用)的處理策略,目前只支持AbortPolicy、CallerRunsPolicy;默認為后者
         *
         * AbortPolicy:直接拋出java.util.concurrent.RejectedExecutionException異常
         * CallerRunsPolicy:主線程直接執行該任務,執行完之后嘗試添加下一個任務到線程池中,可以有效降低向線程池內添加任務的速度
         * DiscardOldestPolicy:拋棄舊的任務、暫不支持;會導致被丟棄的任務無法再次被執行
         * DiscardPolicy:拋棄當前任務、暫不支持;會導致被丟棄的任務無法再次被執行
         */
        threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

        return threadPoolTaskExecutor;
    }
}

  


免責聲明!

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



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