国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

一文秒懂Java中的樂(lè )觀(guān)鎖 VS 悲觀(guān)鎖

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:小劉你最強 欄目: 編程語(yǔ)言 歡迎投稿:712375056

樂(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

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,

  1. 比較 A 與 V 是否相等。(比較)
  2. 如果比較相等,將 B 寫(xiě)入 V。(交換)
  3. 返回操作是否成功。

CAS的底層原理

  • 調用 Unsafe 類(lèi)中的 CAS 方法,JVM 會(huì )幫我們實(shí)現出 CAS 匯編指令
  • 這是一種完全依賴(lài)于硬件的功能,通過(guò)它實(shí)現原子操作
  • 原語(yǔ)的執行必須是連續的,在執行過(guò)程中不允許被中斷,CAS 是 CUP 的一條原子指令

CAS的三大問(wèn)題

  • 如果 CAS 長(cháng)時(shí)間一直不成功,會(huì )給 CPU 帶來(lái)很大的開(kāi)銷(xiāo),在Java的實(shí)現中是一只通過(guò)while循環(huán)自旋CAS獲取鎖。
  • 只能保證一個(gè)共享變量的原子操作
  • 引出了 ABA 問(wèn)題

ABA問(wèn)題

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

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í)歡迎投稿傳遞力量。

亚洲AV中文无码字幕色最新| 老熟女激烈的高潮| 无套内射在线无码播放| 欧美丰满熟妇BBBBBB| 一区二区狠狠色丁香久久婷婷| 国产精品边做奶水狂喷无码|