首頁(yè)技術(shù)文章正文

Java面試:樂(lè)觀鎖和悲觀鎖分別是什么?

更新時(shí)間:2020-05-26 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif


樂(lè)觀鎖

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

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

 

悲觀鎖

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

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

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


在黑馬程序員學(xué)java是什么感受?下面我們通過(guò)一個(gè)視頻來(lái)感受。

1590050011625_咨詢課程小.jpg


猜你喜歡:

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

Java中volatile關(guān)鍵字有什么作用?

Java編程思想

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!