多執行緒併發已經加了鎖,仍出現資料不準確問題

2021-08-20 20:23:36 字數 303 閱讀 5214

這邊記一次線上出現的bug,場景描述:

服務端提供了獲取碼的介面,這個介面有2個動作,查詢碼,然後將查詢出的碼在表中刪除,可是當多個執行緒併發訪問時,第二個執行緒可以查詢出第乙個執行緒已經刪除的碼,這就有問題了。

排查問題:

1.懷疑是mybatis快取引起的,把快取關掉,還是有問題;

2.參考:鏈結內容 這篇文章可以確定問題是關於事務的。

解決辦法:

法1.去掉service裡的事務;

法2.將synchronized加在controller層;

法3.修改資料庫的事務隔離級別。

Java多執行緒與併發 Java鎖

累嗎?累就對了,說明你還活著 公平鎖 是指多個執行緒按照申請鎖的順序來獲取鎖,類似排隊打飯,先來後到。非公平鎖 是指多個執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取鎖。在高併發的情況下,有可能會造成優先順序反轉或者飢餓現象 並發包中reentrantlock...

C C 筆記 2 多執行緒 併發 互斥鎖

1.1 執行緒的管理 乙個程序中至少存在乙個執行緒,這個執行緒被稱為主線程,我們可以在任意執行緒中建立執行緒類的例項。每個執行緒都需要乙個入口函式,當入口函式返回時,執行緒就會退出,主線程的入口函式為main 1.1.1 執行緒的啟動 執行緒的建立十分簡單,我們只需建立乙個執行緒類的例項,並為它傳入...

高併發 並行,多執行緒 同步非同步,鎖

1 為什麼需要並行?業務要求 業務需要邏輯執行單元,想到用執行緒充當這個單元 效能並行 比序列 複雜的多。2 幾個重要的概念 同步 synchronous 和非同步 asynchronous 相對於方法呼叫而言。同步等待方法返回。非同步呼叫瞬間返回,呼叫不一定完成,在後台另起乙個執行緒慢慢的去做它的...