1. 程式人生 > >樂觀鎖和悲觀鎖的區別和使用場合

樂觀鎖和悲觀鎖的區別和使用場合

每次 適合 頻繁 style 優點 獲取數據 行數據 悲觀鎖 取數據

一:樂觀鎖(Optimistic Lock)

 每次獲取數據的時候,都不會擔心數據會被修改,所以每次獲取數據時都不會進行加鎖。

 但是在更新數據的時候,需要判斷該數據是否被別人修改過,如果數據被其他線程修改過,則不進行數據更新。

 如果數據沒有被其他線程修改,則進行數據更新。由於數據沒有進行加鎖,期間該數據可以被其他線程進行讀寫操作。

二:悲觀鎖(Pessimistic Lock)

 每次獲取數據的時候,都會擔心數據會被修改,所以每次獲取數據的時候都會進行加鎖,

 確保在自己使用的過程中數據不被別人修改,使用完後進行數據解鎖。

 由於數據會進行加鎖,期間對該數據進行讀寫和其他線程都會進行等待。

三:適用場合

  樂觀鎖:比較適合讀取操作比較頻繁的場合。

      如果出現大量的寫入操作,數據發生沖突的可能性就會增大,為了保證數據的一致性,

      應用層需要不斷的重新獲取數據,這樣會增加大量的查詢操作,降低了系統的吞吐量。

  悲觀鎖:比較適合寫入操作比較頻繁的場合。

      如果出現大量的讀取操作,每次讀取的時候都會進行加鎖,這樣會增加大量的鎖的開銷,降低了系統的吞吐量。

  總結:兩種鎖各有各的優點,讀取頻繁使用樂觀鎖,寫入頻繁使用悲觀鎖。

  

  

  

樂觀鎖和悲觀鎖的區別和使用場合