首頁技術文章正文

Java面試:樂觀鎖和悲觀鎖分別是什么?

更新時間:2020-05-26 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif


樂觀鎖

樂觀鎖是一種樂觀思想,即認為讀多寫少,遇到并發(fā)寫的可能性低,每次去拿數(shù)據(jù)的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數(shù)據(jù),采取在寫時先讀出當前版本號,然后加鎖操作(比較跟上一次的版本號,如果一樣則更新),如果失敗則要重復讀-比較-寫的操作。

Java中的樂觀鎖基本都是通過CAS操作實現(xiàn)的,CAS 是一種更新的原子操作,比較當前值跟傳入值是否一樣,一樣則更新,否則失敗。

 

悲觀鎖

悲觀鎖是就是悲觀思想,即認為寫多,遇到并發(fā)寫的可能性高,每次去拿數(shù)據(jù)的時候都認為別人會修改,所以每次在讀寫數(shù)據(jù)的時候都會上鎖,這樣別人想讀寫這個數(shù)據(jù)就會block直到拿到鎖。

Java中的悲觀鎖就是Synchronized,AQS框架下的鎖則是先嘗試cas樂觀鎖去獲取鎖,獲取不到,才會轉(zhuǎn)換為悲觀鎖,如 RetreenLock。

以上我們介紹了java中的樂觀鎖和悲觀鎖的概念希望對你有所幫助,如果想系統(tǒng)學習和提升java技術能力,推薦了解黑馬程序員中級java程序員培訓課程。


在黑馬程序員學java是什么感受?下面我們通過一個視頻來感受。

1590050011625_咨詢課程小.jpg


猜你喜歡:

Java中sleep方法與wait方法的區(qū)別

Java中volatile關鍵字有什么作用?

Java編程思想

分享到:
在線咨詢 我要報名
和我們在線交談!