- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- 一文秒懂Java中的樂(lè )觀(guān)鎖 VS 悲觀(guān)鎖
悲觀(guān)鎖:總是假設最壞的情況,每次取數據時(shí)都認為其他線(xiàn)程會(huì )修改,所以都會(huì )加鎖(讀鎖、寫(xiě)鎖、行鎖等),當其他線(xiàn)程想要訪(fǎng)問(wèn)數據時(shí),都需要阻塞掛起。
樂(lè )觀(guān)鎖:總是認為不會(huì )產(chǎn)生并發(fā)問(wèn)題,每次去取數據的時(shí)候總認為不會(huì )有其他線(xiàn)程對數據進(jìn)行修改,因此不會(huì )上鎖,但是在更新時(shí)會(huì )判斷其他線(xiàn)程在這之前有沒(méi)有對數據進(jìn)行修改。
樂(lè )觀(guān)鎖在Java中通過(guò)使用無(wú)鎖來(lái)實(shí)現,常用的是CAS,Java中原子類(lèi)的遞增就是通過(guò)CAS自旋實(shí)現。
CAS全稱(chēng) Compare And Swap(比較與交換),是一種無(wú)鎖算法。在不使用鎖(沒(méi)有線(xiàn)程被阻塞)的情況下實(shí)現多線(xiàn)程之間的變量同步。java.util.concurrent包中的原子類(lèi)就是通過(guò)CAS來(lái)實(shí)現了樂(lè )觀(guān)鎖。
一個(gè) CAS 涉及到以下操作:
我們假設內存中的原數據V,舊的預期值A,需要修改的新值B,
CAS需要在操作值的時(shí)候檢查內存值是否發(fā)生變化,沒(méi)有發(fā)生變化才會(huì )更新內存值。但是如果內存值原來(lái)是A,后來(lái)變成了B,然后又變成了A,那么CAS進(jìn)行檢查時(shí)會(huì )發(fā)現值沒(méi)有發(fā)生變化,但是實(shí)際上是有變化的。
如何解決ABA問(wèn)題
加入版本信息,例如攜帶 AtomicStampedReference 之類(lèi)的時(shí)間戳作為版本信息,保證不會(huì )出現老的值。
Unsafe類(lèi)是在sun.misc包下,不屬于Java標準。但是很多Java的基礎類(lèi)庫,包括一些被廣泛使用的高性能開(kāi)發(fā)庫都是基于Unsafe類(lèi)開(kāi)發(fā)的,比如Netty、Cassandra、Hadoop、Kafka等。Unsafe類(lèi)在提升Java運行效率,增強Java語(yǔ)言底層操作能力方面起了很大的作用。
使用Unsafe可用來(lái)直接訪(fǎng)問(wèn)系統內存資源并進(jìn)行自主管理,Unsafe類(lèi)在提升Java運行效率,增強Java語(yǔ)言底層操作能力方面起了很大的作用。
Unsafe可認為是Java中留下的后門(mén),提供了一些低層次操作,如直接內存訪(fǎng)問(wèn)、線(xiàn)程調度等。
這個(gè)類(lèi)的提供了一些繞開(kāi)JVM的更底層功能,基于它的實(shí)現可以提高效率。但是,它是一把雙刃劍:正如它的名字所預示的那樣,它是Unsafe的,它所分配的內存需要手動(dòng)free(不被GC回收)。如果對Unsafe類(lèi)理解的不夠透徹,就進(jìn)行使用的話(huà),就等于給自己挖了無(wú)形之坑,最為致命。
到此這篇關(guān)于一文秒懂樂(lè )觀(guān)鎖 VS 悲觀(guān)鎖的文章就介紹到這了,更多相關(guān)java樂(lè )觀(guān)鎖 悲觀(guān)鎖內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站