JAVA樂觀鎖、悲觀鎖實現

1、名詞解釋

  一、悲觀鎖:認爲每次對數據庫的操做(查詢、修改)都是不安全的,所以每次操做都會把這條數據鎖掉,直到本次操做完畢釋放該鎖數據庫

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

2、使用過程

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

    SELECT * FROM TABLE WHERE ID='1' FOR UPDATE;高併發

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

   悲觀鎖缺陷:若是在高併發的狀況下,每條數據都排隊按照以上過程去加鎖、運行、解鎖,那麼可想而知執行時間,等待時間是很是長的,用戶體驗是很是差的事務

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

    UPDATE TABLE SET NAME='DD' WHERE UPDATETIME='查詢出的時間'AND ID='1'用戶體驗

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

   樂觀鎖缺陷:若是修過特別頻繁衝突特別多的狀況下會致使不少操做都失敗im

相關文章
相關標籤/搜索