關於線程池運行過程當中,業務邏輯出現未知異常致使線程中斷問題反思

最近在項目研發中的關於線程池應用過程當中因爲業務邏輯異常致使的線程中斷,但程序未中斷致使的髒數據問題

 話很少說,在最近最新的一個版本發佈過程當中,業務須要,咱們要按期去給客戶預留出可用的資源數據,提供客戶使用,在版本即將上線前一週測試過程當中,遇到的預留資源數據跟實際數據不匹配,剛開始反覆檢查代碼,經過日誌調試一直無果,通過不懈努力,最終終於發現是因爲線程在跑業務時,拋出未知異常,當前線程中斷,然而主程序並未異常,致使最終響應的數據與實際不符。下面我就簡答舉例說明下這個問題

1.獲取資源數據demo工具

構造簡答異常邏輯性能

在主程序中,可能會涉及到各類數據處理,致使我咱們要對集合,數據,存儲等進行各類操做,不免會存在異常場景不全的狀況測試

對了這塊說下,在循環塊中如何規避對集合進行增刪改所致使的問題,這邊能夠用迭代器進行處理spa

3.構造簡單線程池對集合數據進行業務處理線程

 

 4.執行結果設計

經過以上簡單的例子能夠看出,因爲線程異常中斷,致使咱們在最終拿到的數據可能跟咱們預期的數據不符,致使在數據業務處理時出現各類問題,對此,在線程池的應用中,咱們仍是應該注意對新開的線程中的異常進行對應的捕獲處理,雖說看上去是個小問題,可是平時調試過程當中出了問題,會致使咱們的程序很難定位到具體的bug點,這對樓主來講就是個教訓呀。在此但願各位能有所收益。假如你在新開的線程中沒有設計對應的異常捕獲,會形成,程序運行沒問題,日誌打的也ok  可是數據對不上,會讓咱們很難判斷問題所在。在此與你們共勉。

最後,樓主說下,線程池最好仍是藉助成熟的Util工具,樓主只是簡單舉個例子,在實際應用過程當中,成熟的工具在性能,內存消耗等各方面條件都是最優的,我的認爲~~~~~

今天就先到這吧,洗洗睡吧,everybody~~~~

相關文章
相關標籤/搜索