執行緒池中的坑
阿新 • • 發佈:2019-01-07
1、Spring的執行緒池定義如下
<bean id="threadPoolExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="3"/> <property name="maxPoolSize" value="50"/> <property name="queueCapacity" value="300"/> </bean>
2、如果服務端有多個業務A,B公用執行緒池,如果A,B沒有相互依賴,則沒啥問題,一旦A,B 有依賴,則可能出現系統掛住。
因為可能執行緒池被A請求佔滿,A請求依賴B,而B一直在排隊,所以出現死迴圈。
3、需要啟動一個執行緒對執行緒池進行監控,保證執行緒池健康的執行。(重要)比如可以列印日誌,然後在視覺化
如果解決這種問題
將執行緒池進行隔離,建立多個執行緒池。
執行緒池的排程很消耗CPU,因此可以根據業務需求而選擇合理的使用執行緒池。