樂觀鎖和悲觀鎖

2021-08-30 16:54:15 字數 1282 閱讀 6214

悲觀鎖:

配置: person p = (person)session.load(person.class, 2, lockmode.upgrade) ;

相當於發出一條sql語句並鎖定該語句 .

9.樂觀鎖機制

如何配置:

第一步:在person.hbm.xml中

類的設計:

public class person

public void setamount(int amount)

public int getid()

public void setid(int id)

public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

public int getversion()

public void setversion(int version)

}

測試**:

public static void getdata2()  catch (hibernateexception e) 			

e.printstacktrace() ;

} finally

}

原理解析:

假設有兩個使用者在同一時間併發訪問:

使用者a和b

假設person表中的字段version=0 ,amount=10000;

a使用者上來取出version=0 ,amount=10000;

然後把version=1,amount=5000 ;

正在此時a尚未來得及提交,b使用者上來,取出version=0,amount=10000;

之後a使用者commit

發出update person set version=0+1 and amount=50000

where id=2 and version=0

此時資料庫中的version=1 ,amount=5000 ;

之後b使用者也提交commit

發出update person set version=0+1 and amount=50000

where id=2 and version=0

此時在資料庫中已經不存在id=2 version=0的記錄,所以提交失敗,資料要回滾

樂觀鎖和悲觀鎖

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

樂觀鎖和悲觀鎖

併發衝突 在多使用者的環境下,如果使用者同時修改同乙個文件,就會造成衝突。典型的衝突有兩種 1 丟失更新 乙個使用者的更新記錄覆蓋了另乙個人的更新。如 使用者一 讀 寫 使用者二 讀 寫 那麼使用者一就把使用者二的更新覆蓋了。2 髒讀 乙個使用者更新資料未完成時,另乙個使用者就讀取資訊。使用者一 讀...

樂觀鎖和悲觀鎖

為什麼需要鎖 併發控制 在多使用者環境中,在同一時間可能會有多個使用者更新相同的記錄,這會產生衝突。這就是著名的併發性問題。典型的衝突有 l 丟失更新 乙個事務的更新覆蓋了其它事務的更新結果,就是所謂的更新丟失。例如 使用者a把值從6改為2,使用者b把值從2改為6,則使用者a丟失了他的更新。l 髒讀...