一次執行緒引發的髒資料

2021-08-26 23:51:26 字數 1022 閱讀 3205

專案新增新功能,功能做完測試階段在資料庫出現髒資料,正常的資料有兩種

但是不定時會出現

這樣的資料,排查思路是這樣的:

一:問題分析。

髒資料應該不是憑空出現的,按照資料內容情況比較像兩種型別的資料拼接而成。而chargedate是date型別的資料轉換而成所以問題應該出現在date型別處理這方面,查詢與chargedate有關的**發現大部分對chargedate的處理都是從容器中新增或取出。只有

chargedate = sdf.format(dateutils.addhour(next.getdate("create_time"), -8));
這部分**是轉換的部分,可能問題出在這裡

而「sdf」是由

private ******dateformat sdf = new ******dateformat("yyyymmdd");
整個類公有的,這個service層資料處理比較多,多個方法,多次使用了sdf.format()方法,所以問題應該出現在多執行緒搶奪cpu資源而產生髒資料。

二:解決辦法

因為問題是因為多個執行緒共同操作乙個sdf引起的,所以只需要把每個執行緒的sdf變為區域性變數就可以了。

******dateformat sdf = new ******dateformat("yyyymmdd");
三:總結

這次的問題找到問題原因並不是這麼順利就找到的,中間也走了彎路,但使我對查詢問題有了更好的思維方式。

出現問題首先要分析問題可能會出現的原因

定位到**中,刨去與問題無關的部分

找到原因,解決問題。

最後寫**方法與方法耦合度不要太高,分層解耦很重要。

一次線上故障引發的警示

這次引發的線上故障和我有直接關係,現分析一下這次故障產生的原因和經驗教訓,還請大家引以為戒。原因分析 1 在 公升級包開發過程中,編寫偽登陸介面測試用例時走讀介面 發現對介面引數控制不嚴格 判斷引數是否為null 對其重構為更嚴格引數控制 判斷null或空字串 但未考慮到 中的潛規則 呼叫方就是傳遞...

一次快遞經歷引發的思考

最近一次蛋疼的寄快遞經歷引發了我對企業發展的思考,為什麼有的企業可以發展的很好,而為什麼有的企業卻面臨倒閉?2.1 底層員工是企業門面 企業的底層員工是直接接觸客戶的,他們是公司的門面和形象,他們做事的態度和方式直接影響著使用者對企業的印象。乙個企業對底層員工沒有基本的要求,任由其胡亂作為,這對公司...

記一次noprefixroute引發的問題

ip addr顯示內容 inet 中包含 noprefixroute,看著礙眼想去掉,不知道怎麼弄。最終找到了一台不顯示這項引數的機器,開啟其 etc sysconfig network scripts ifcfg ethx,多方比對發現配置了nm controlled no。該引數預設為yes,竟...