沒想到,這麼簡單的線程池用法,深藏這麼多坑

又又又踩坑了

生產有個對帳系統,天天須要從渠道端下載對帳文件,而後開始日終對帳。這個系統已經運行了好久,前兩天忽然收到短信預警,沒有獲取渠道端對帳文件。異步

ide

ps:對帳系統詳細實現方式:聊聊對帳系統的設計方案函數

本覺得又是渠道端搞事情,上去一排查才發現,全部下載任務都被阻塞了。再進一步排查源碼,才發現本身一直用錯了線程池某個方法。工具

因爲線程建立比較昂貴,正式項目中咱們都會使用線程池執行異步任務。線程池,使用池化技術保存線程對象,使用的時候直接取出來,用完歸還以便使用。線程

雖然線程池的使用很是方法很是簡單,可是越簡單,越容易踩坑。細數一下,這些年來由於線程池致使生產事故也有好幾起。設計

因此今天,小黑哥就針對線程池的話題,給你們演示一下怎麼使用線程池纔會踩坑。code

但願你們看完,能夠完美避開這些坑~對象

慎用 Executors 組件

Java 從 JDK1.5 開始提供線程池的實現類,咱們只須要在構造函數內傳入相關參數,就能夠建立一個線程池。blog

沒想到,這麼簡單的線程池用法,深藏這麼多坑

不過線程池的構造函數能夠說很是複雜,就算最簡單的那個構造函數,也須要傳入 5 個參數。這對於新手來講,很是不方便哇。開發

也許 JDK 開發者也考慮到這個問題,因此很是貼心給咱們提供一個工具類 Executors,用來快捷建立建立線程池。

雖然這個工具類使用真的很是方便,能夠少寫不少代碼,可是小黑哥仍是建議生產系統仍是老老實實手動建立線程池,慎用Executors,尤爲是工具類中兩個方法 Executors#newFixedThreadPoolExecutors#newCachedThreadPool

若是你圖了方便使用上述方法建立了線程池,那就是一顆定時炸彈,說不許那一天生產系統就會

相關文章
相關標籤/搜索