1. 程式人生 > >關於執行緒池執行過程中,業務邏輯出現未知異常導致執行緒中斷問題反思

關於執行緒池執行過程中,業務邏輯出現未知異常導致執行緒中斷問題反思

關於執行緒池執行過程中,業務邏輯出現未知異常導致執行緒中斷問題反思

最近在專案研發中的關於執行緒池應用過程中由於業務邏輯異常導致的執行緒中斷,但程式未中斷導致的髒資料問題

 話不多說,在最近最新的一個版本釋出過程中,業務需要,我們要定期去給客戶預留出可用的資源資料,提供客戶使用,在版本即將上線前一週測試過程中,遇到的預留資源資料跟實際資料不匹配,剛開始反覆檢查程式碼,通過日誌除錯一直無果,經過不懈努力,最終終於發現是由於執行緒在跑業務時,丟擲未知異常,當前執行緒中斷,然而主程式並未異常,導致最終響應的資料與實際不符。下面我就簡答舉例說明下這個問題

1.獲取資源資料demo

構造簡答異常邏輯

在主程式中,可能會涉及到各種資料處理,導致我我們要對集合,資料,儲存等進行各種操作,難免會存在異常場景不全的情況

對了這塊說下,在迴圈塊中如何規避對集合進行增刪改所導致的問題,這邊可以用迭代器進行處理

3.構造簡單執行緒池對集合資料進行業務處理

 

 4.執行結果

通過以上簡單的例子可以看出,由於執行緒異常中斷,導致我們在最終拿到的資料可能跟我們預期的資料不符,導致在資料業務處理時出現各種問題,對此,線上程池的應用中,我們還是應該注意對新開的執行緒中的異常進行對應的捕獲處理,雖然說看上去是個小問題,但是平時除錯過程中出了問題,會導致我們的程式很難定位到具體的bug點,這對樓主來說就是個教訓呀。在此希望各位能有所收益。假如你在新開的執行緒中沒有設計對應的異常捕獲,會造成,程式執行沒問題,日誌打的也ok  但是資料對不上,會讓我們很難判斷問題所在。在此與大家共勉。

最後,樓主說下,執行緒池最好還是藉助成熟的Util工具,樓主只是簡單舉個例子,在實際應用過程中,成熟的工具在效能,記憶體消耗等各方面條件都是最優的,個人認為~~~~~