JAVA多線程下,獲取遞增的序列號


場景描述:

   1,目前我們的系統可以簡單歸納成MVC的架構模式

        2,每個前端的請求過來,都會在C層開啟事務,最后處理結束后,也在在C層關閉事務(實際是在C層的底層統一做了事務的開啟和提交);        

問題描述:

       有一個接口方法,用於獲取數據庫中的序列號,然后+1再保存到數據庫。 

       客戶的報障是:並發情況下出現了單號重復,也就是多個線程同時取到了相同的序列號,而不是等到上一個線程將序列號+1后的值。   

問題分析:

       初步分析,存在兩個問題:

       1,方法的鎖不起作用

       2,序列號+1的事務提交有問題  

解決方案:

       1,方法增加靜態鎖

       2,接口方法內部,啟動一個子線程,用於開啟一個事務,獲取序列號,然后+1提交數據庫,提交事務,子線程執行結束。(在子線程的t.start()后,加了t.join())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM