悲觀鎖:每次拿數據和寫數據都認爲別人會進行修改(具備強烈的獨佔和排他性)git
依賴數據庫的鎖機制實現,以保證操做最大程度的獨佔性。github
缺點:數據庫性能的大量開銷,特別是對長事務而言,這樣的開銷沒法承受 算法
樂觀鎖:每次拿數據都認爲別人不會修改,只有寫數據才認爲別人會進行修改,樂觀鎖不能解決髒讀問題數據庫
樂觀鎖大多都基於數據版本(version)記錄機制實現,何謂數據版本?即爲數據增長一個版本標識,在基於數據庫表的版本解決方案中,通常是經過爲數據表增長一個「version」字段來實現。讀取出數據時,將此版本一同讀出,以後更新時,對此版本後+1.此時,將提交的版本數據與數據庫表對應記錄的當前版本信息對比時,若是提交的數據版本號大於數據庫當前版本號,則予以更新,不然認爲是過時數據 ide
樂觀鎖通常採用版本機制和CAS算法(會致使aba問題);用於讀多寫少 悲觀鎖通常是synchronized和ReentrantLock獨佔鎖,行鎖,表鎖,讀鎖和寫鎖;用於讀少寫多
樂觀鎖和悲觀鎖性能