更新時(shí)間:2020-05-26 來(lái)源:黑馬程序員 瀏覽量:
樂(lè)觀鎖
樂(lè)觀鎖是一種樂(lè)觀思想,即認(rèn)為讀多寫(xiě)少,遇到并發(fā)寫(xiě)的可能性低,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù),采取在寫(xiě)時(shí)先讀出當(dāng)前版本號(hào),然后加鎖操作(比較跟上一次的版本號(hào),如果一樣則更新),如果失敗則要重復(fù)讀-比較-寫(xiě)的操作。
Java中的樂(lè)觀鎖基本都是通過(guò)CAS操作實(shí)現(xiàn)的,CAS 是一種更新的原子操作,比較當(dāng)前值跟傳入值是否一樣,一樣則更新,否則失敗。
悲觀鎖
悲觀鎖是就是悲觀思想,即認(rèn)為寫(xiě)多,遇到并發(fā)寫(xiě)的可能性高,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在讀寫(xiě)數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想讀寫(xiě)這個(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)感受。
猜你喜歡: