1. 程式人生 > >Spring Boot執行緒池配置使用

Spring Boot執行緒池配置使用

首先,我們要了解什麼是執行緒池,執行緒,大家應該都不陌生,我們可以把一個介面處理的單個任務當做一個執行緒,比如上傳檔案,呼叫介面,上傳檔案,上傳完成。 這時會初始化一個執行緒,等待上傳結束,執行緒銷燬 。 但是這樣會頻繁的建立銷燬執行緒,為了不浪費更多的系統資源,我們使用執行緒池概念,比如有有一個容器 我們初始化一部分核心執行緒,設定最大執行緒數,當客戶訪問我們的服務時,核心執行緒開始處理,處理完畢後不是銷燬而是再放回容器中,這樣就不會頻繁的建立銷燬執行緒,當我們設定的核心執行緒不夠使用時,會繼續建立執行緒,直至我們設定的最大執行緒數,例如,我們設定核心執行緒為10,最大執行緒數為100,那麼當連線到達100後就會拒絕連線,這樣也可以防止我們的系統遭受攻擊。當連線數降下來後,多餘的90個執行緒會在設定的時間內銷燬,來釋放系統資源,下面我們就來程式碼實現下:

環境: IDEA + SpringBoot

首先:建立一個類並實現 AsyncConfigurer 介面,然後在這個類上加上 @Component 註解,以便在啟動專案時被掃描到

@Component
public class ThreadAsyncConfigurer  implements AsyncConfigurer {
    @Bean
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
        //設定核心執行緒數
        threadPool.setCorePoolSize(10);
        //設定最大執行緒數
        threadPool.setMaxPoolSize(100);
        //執行緒池所使用的緩衝佇列
        threadPool.setQueueCapacity(10);
        //等待任務在關機時完成--表明等待所有執行緒執行完
        threadPool.setWaitForTasksToCompleteOnShutdown(true);
        // 等待時間 (預設為0,此時立即停止),並沒等待xx秒後強制停止
        threadPool.setAwaitTerminationSeconds(60);
        //  執行緒名稱字首
        threadPool.setThreadNamePrefix("MyAsync-");
        // 初始化執行緒
        threadPool.initialize();
        return threadPool;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }

}

第二步:在SpringBoot啟動類 Application 上加上 @EnableAsync  註解

@SpringBootApplication
@EnableAsync  //執行緒池註解
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

}

第三步:在Service 層的方法上加上 @Async 註解

@Service
public class FileService {

    //測試執行緒池
    @Async
    public void testthread(){
        System.out.println("執行緒名稱:"+Thread.currentThread().getName());
    }
這樣執行緒池就實現了,是不是很簡單呢,個人理解,如有錯誤,還望大神指正