1. 程式人生 > >JAVA樂觀鎖、悲觀鎖實現

JAVA樂觀鎖、悲觀鎖實現

個數 自動 時間 update 頻繁 每次 調用 內部實現 字段

一、名詞解釋

  1、悲觀鎖:認為每次對數據庫的操作(查詢、修改)都是不安全的,因此每次操作都會把這條數據鎖掉,直到本次操作完畢釋放該鎖

  2、樂觀鎖:查詢數據的時候總是認為是安全的,不會鎖數據;等到更新數據的時候會判斷這個數據是否被人修改過,如果有人修改過了則本次修改失敗

二、使用過程

  1、悲觀鎖:悲觀鎖的內部實現是采用的數據庫內部的鎖機制,一個典型的依賴數據庫的悲觀鎖調用:

    SELECT * FROM TABLE WHERE ID=‘1‘ FOR UPDATE;

    這條語句鎖定了TABLE表總id=‘1‘的這條數據,本次事務提交之前(事務提交後會釋放事物終的鎖)外界無法修改本條記錄,同時也保證了本條數據的準確性;

   悲觀鎖缺陷:如果在高並發的情況下,每條數據都排隊按照以上過程去加鎖、運行、解鎖,那麽可想而知執行時間,等待時間是非常長的,用戶體驗是非常差的

  2、樂觀鎖:樂觀鎖的實現方式有兩種:1是添加version字段每次修過疊加;2是使用updatetime每次更新數據後系統自動更新

    UPDATE TABLE SET NAME=‘DD‘ WHERE UPDATETIME=‘查詢出的時間‘AND ID=‘1‘

    UPDATETIME也可換成version 在where條件加上這兩天自動更新字段,如果不符合說明有改動

   樂觀鎖缺陷:如果修過特別頻繁沖突特別多的情況下會導致很多操作都失敗

JAVA樂觀鎖、悲觀鎖實現