1. 程式人生 > 實用技巧 >執行緒池的理解與應用

執行緒池的理解與應用

目錄

  1. 執行緒池的理解(簡單概述)
  2. Async執行緒池(加配置)
  3. Scheduled(加配置)
  4. 執行緒池使用的五種配置四種策略

一. 執行緒池的理解

  單體的執行緒每次請求頻繁的建立,請求過後頻繁的銷燬,導致執行緒棧中的資源的大量消耗。

  執行緒池的出現在於對單體執行緒的可控性,管理資源的消耗。

二. Async的執行緒池

  使用非同步去配置執行緒池的話,如圖

 此時此刻,沒有指定Bean的名字,出現一個問題就是啟動預設的Async執行緒池了,並且沒有走你自己配置的執行緒池

   

 走配置的話需要指定Bean名稱,讓他去覆蓋

  

 1  @Bean("taskExecutor")
2 public AsyncTaskExecutor getAsyncE(){ 3 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 4 executor.setCorePoolSize(coreSize); 5 executor.setMaxPoolSize(maxSize); 6 executor.setQueueCapacity(queueSize); 7 executor.setRejectedExecutionHandler(new
ThreadPoolExecutor.AbortPolicy()); 8 executor.setThreadNamePrefix("MyThread-"); 9 return executor; 10 }

列印如圖

三. Scheduled(配置)

不需要指定Bean名稱,如果不指定池子的大小預設為1

 1  @Bean
 2     public ThreadPoolTaskScheduler getTaskScheduled(){
 3         ThreadPoolTaskScheduler taskScheduler = new
ThreadPoolTaskScheduler(); 4 //配置池子的大小 5 taskScheduler.setPoolSize(20); 6 //拒絕策略為 丟擲異常 7 taskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); 8 //設定名字 9 taskScheduler.setThreadNamePrefix("MyScheduled-"); 10 return taskScheduler; 11 }

四.執行緒池的五種配置

  1. newSingleThreadPoolExecutor
  2. newFixedThreadPoolExecutor
  3. newCachedThreadPoolExecutor
  4. newScheduledThreadPoolExecutor
  5. ThreadPoolExecutor

 底層全是ThreadPoolExecutor,預設策拒絕略都是AbortPolicy,LinkedBlockingQueue=Integer_Max_Value

1. newSingleThreadPoolExecutor --> coreSize=1,maxSize=1

2. newFixedThreadPoolExecutor --> coreSize = maxSize =固定自己寫入 = 5

3. newCachedThreadPoolExecutor --> coreSize = 0,maxSize = Integer_Max_Value

4. newScheduledThreadPoolExecutor --> coreSize預設為1 ,maxSize = Integer_max_value

5. ThreadPoolExecutor

四種策略

  1. AbortPolicy-->拒絕直接丟擲異常
  2. CallerRunsPolicy -->拒絕策略為誰發來的返回給誰自己做
  3. DiscardOrdestPolicy -->丟棄最老的任務,排進去新任務
  4. DiscardPolicy -->直接丟棄任務