悲觀鎖和樂觀鎖


悲觀鎖

總是假設最壞的情況,每次拿數據都認為別人會修改數據,所以要加鎖,別人只能等待,直到我釋放鎖才能拿到鎖;數據庫的行鎖、表鎖、讀鎖、寫鎖都是這種方式,java中的synchronized和ReentrantLock也是悲觀鎖的思想。

樂觀鎖

總是假設最好的情況,每次拿數據都認為別人不會修改數據,所以不會加鎖,但是更新的時候,會判斷在此期間有沒有人修改過;一般基於版本號機制實現。

使用場景

樂觀鎖適用於讀多寫少的情況,即沖突很少發生;如果是多寫的情況,應用會不斷重試,反而會降低系統性能,這種情況最好用悲觀鎖,因為等待到鎖被釋放后,可以立即獲得鎖進行操作。


免責聲明!

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



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