場景描述:
1,目前我們的系統可以簡單歸納成MVC的架構模式
2,每個前端的請求過來,都會在C層開啟事務,最后處理結束后,也在在C層關閉事務(實際是在C層的底層統一做了事務的開啟和提交);
問題描述:
有一個接口方法,用於獲取數據庫中的序列號,然后+1再保存到數據庫。
客戶的報障是:並發情況下出現了單號重復,也就是多個線程同時取到了相同的序列號,而不是等到上一個線程將序列號+1后的值。
問題分析:
初步分析,存在兩個問題:
1,方法的鎖不起作用
2,序列號+1的事務提交有問題
解決方案:
1,方法增加靜態鎖
2,接口方法內部,啟動一個子線程,用於開啟一個事務,獲取序列號,然后+1提交數據庫,提交事務,子線程執行結束。(在子線程的t.start()后,加了t.join())