執行緒同步 2 悲觀鎖和樂觀鎖

2021-07-02 07:45:11 字數 514 閱讀 4274

悲觀鎖,它假設只要有資料訪問就會產生衝突,當乙個執行緒讀取資料時就一定要上鎖,其他使用者無法操作,直到鎖釋放。

悲觀鎖是利用資料的機制實現的,在查詢時是sql語句中加入「for update」,這樣整個事務會被鎖住,只有當本次事務執行結束後才能進行下次執行緒操作。這將防止其他程序讀取或修改表中的資料

select  value from t_table_id where table_name=? for update

樂觀鎖,它假設資料訪問時不會產生衝突,只是在提交事務時要檢查是否違反了資料完整性,更新時檢查版本號是否一致。

比如資料庫中資料版本為6,更新提交時version=6+1,使用該version值(=7)與資料庫version+1(=7)作比較,如果相等,則可以更新,如果不等則有可能其他程式已更新該記錄,所以返回錯誤。

樂觀鎖適用於對資料庫讀的應用。

樂觀鎖更適用於對於表的修改比較少的情況,而悲觀鎖更實用於對於資料的修改比較多的情況,它能保證執行緒同步,不產生髒資料。

悲觀鎖和樂觀鎖

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

悲觀鎖和樂觀鎖

前幾天有人問了我乙個問題,說如果資料庫某些操作不用事務,那麼又需要保持資料的一致性,那麼該用什麼方法替代事務。我就想到了悲觀鎖和樂觀鎖的思想,下面我解釋一下在資料庫中的悲觀鎖和樂觀鎖 1.悲觀鎖就是把資料庫的一些操作,放在事務當中,依賴資料庫的隔離級別,實現對資料修改的封鎖,這樣做資料一致性可以保持...

悲觀鎖和樂觀鎖

悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...