樂觀鎖和悲觀鎖


(1)概念


  悲觀鎖,正如其名,具有強烈的獨佔和排他特性。它指的是對數據被外界(包括本系統當前的其他事務,以及來自外部系統的事務處理)修改持保守態度,因此,在整個數據處理過程中,將數據處於鎖定狀態。悲觀鎖的實現,往往依靠數據庫提供的鎖機制(也只有數據庫層提供的鎖機制才能真正保證數據訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無法保證外部系統不會修改數據)。

  樂觀鎖機制採取相對悲觀鎖而言,了更加寬鬆的加鎖機制。


(2)比較


  加鎖時機

  悲觀鎖在準備改變對象之前就將該對象鎖住,並且直到你提交了所作的更改之後才釋放鎖。

  樂觀鎖直到你準備提交所作的更改時纔將對象鎖住,當你讀取以及改變該對象時並不加鎖。

  加鎖方式

  悲觀鎖的實現,往往依靠數據庫提供的鎖機制(也只有數據庫層提供的鎖機制才能真正保證數據訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無法保證外部系統不會修改數據)。(主要通過數據庫的隔離級別進行管理,如打開事務、執行事務、提交事務、事務回滾)

  樂觀鎖的實現,大多是基於數據版本(Version)記錄機制實現。數據初始化後設定一個版本號,每次讀取出數據時,將此版本號一同讀出,之後更新時,對此版本號加一。此時,將提交數據的版本數據與數據庫表對應記錄的當前版本信息進行比對,如果提交的數據版本號大於數據庫表當前版本號,則予以更新,否則認爲是過期數據。(參考Hibernate的樂觀鎖、HashMap實現機制)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章