執行緒池的理解與應用
阿新 • • 發佈:2020-12-28
目錄
- 執行緒池的理解(簡單概述)
- Async執行緒池(加配置)
- Scheduled(加配置)
- 執行緒池使用的五種配置四種策略
一. 執行緒池的理解
單體的執行緒每次請求頻繁的建立,請求過後頻繁的銷燬,導致執行緒棧中的資源的大量消耗。
執行緒池的出現在於對單體執行緒的可控性,管理資源的消耗。
二. 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(newThreadPoolExecutor.AbortPolicy()); 8 executor.setThreadNamePrefix("MyThread-"); 9 return executor; 10 }
列印如圖
三. Scheduled(配置)
不需要指定Bean名稱,如果不指定池子的大小預設為1
1 @Bean 2 public ThreadPoolTaskScheduler getTaskScheduled(){ 3 ThreadPoolTaskScheduler taskScheduler = newThreadPoolTaskScheduler(); 4 //配置池子的大小 5 taskScheduler.setPoolSize(20); 6 //拒絕策略為 丟擲異常 7 taskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); 8 //設定名字 9 taskScheduler.setThreadNamePrefix("MyScheduled-"); 10 return taskScheduler; 11 }
四.執行緒池的五種配置
- newSingleThreadPoolExecutor
- newFixedThreadPoolExecutor
- newCachedThreadPoolExecutor
- newScheduledThreadPoolExecutor
- 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
四種策略
- AbortPolicy-->拒絕直接丟擲異常
- CallerRunsPolicy -->拒絕策略為誰發來的返回給誰自己做
- DiscardOrdestPolicy -->丟棄最老的任務,排進去新任務
- DiscardPolicy -->直接丟棄任務