什麼是線程安全?通俗的講,就是保證多個線程同時對某一對象進行操做時不會出錯。好比兩個客戶端,同時對某個課程進行報名操做並記錄總數,若是不加以併發控制,那麼就會出現對當前報名總數髒讀的狀況。數據庫
企業微信部門建立安全
總結:線程安全問題出現的三個必要條件:服務器
當服務器分佈式集羣形式時,會產生一個問題,當多個訂課請求打到不一樣的服務器上,而多個服務器對已定課程總數的讀取課程中產生髒讀的問題,就叫分佈式鎖問題微信
總結:當多個線程同時對某一對象進行讀寫操做時,好比讀減庫存,排重寫入邏輯主要注意線程安全和分佈式鎖問題,須要對讀寫操做進行一個分佈式的併發場景測試多線程
一、表鎖定:更新/刪除操做會添加排他鎖。此類操做的where條件若是未添加索引會升級爲表級別鎖定,致使其餘邏輯對該表的操做失敗。併發
二、事務中死鎖:兩個事務都持有對方須要的鎖,而且在等待對方釋放,而且雙方都不會釋放本身的鎖。分佈式
當咱們在進行混合場景測試時,發現當分發任務執行時,會有大量的線索操做大量超時報錯,最後排查是由於更新分發結果邏輯包含未加索引的檢索條件升級爲表鎖,致使新線索的插入操做超時報錯ide
總結:當多個邏輯同時處理某個表的數據時,須要考慮這些邏輯並行處理的場景測試