1. 程式人生 > >加鎖要注意的地方-髒讀

加鎖要注意的地方-髒讀

加鎖要注意整體性,比如現在正在給一個引數進行setValue,可能setValue的方法耗時比較長,這時候又有一個執行緒去getValue去了,這個時候就會有問題,所以set和get都要加鎖。

Oracle的一個示例

比如現在有一個使用者A在9:00檢視一張很大的表,查詢到最後一條資料dataLast=100需要十分鐘,這時候有一個使用者B在9:05分修改了dataLast=200,這個時候A使用者檢視datagLast任然是100。Oracle有一個Undo的概念,當Oracle進行DML操作的時候,會先把原先的資料放到Undo裡面,然後再進行修改,如果update失敗,會根據Undo的資料進行回滾。

在9:00使用者A看資料的時候,如果Oracle發現數據的undo有變化了,Oracle就會到Undo裡面去找老值100,如果找到了就返回100,找不到就會報錯(寧可報錯也不會返回200)snapShot too old異常。找不到的可能就比如A在查詢的過程中出現了一些併發的修改。在9點看到的肯定是9點的資料。