亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

java AtomicInteger 源碼之CAS

2019-11-14 10:01:59
字體:
來源:轉載
供稿:網友

樂觀鎖與悲觀鎖

當一個線程被掛起時,加入到阻塞隊列,在一定的時間或條件下,在通過notify(),notifyAll()喚醒回來。在某個資源不可用的時候,就將cpu讓出,把當前等待線程切換為阻塞狀態。等到資源(比如一個共享數據)可用了,那么就將線程喚醒,讓他進入runnable狀態等待cpu調度。這就是典型的悲觀鎖的實現。獨占鎖是一種悲觀鎖,synchronized就是一種獨占鎖,它假設最壞的情況,并且只有在確保其它線程不會造成干擾的情況下執行,會導致其它所有需要鎖的線程掛起,等待持有鎖的線程釋放鎖。

  但是,由于在進程掛起和恢復執行過程中存在著很大的開銷。當一個線程正在等待鎖時,它不能做任何事,所以悲觀鎖有很大的缺點。舉個例子,如果一個線程需要某個資源,但是這個資源的占用時間很短,當線程第一次搶占這個資源時,可能這個資源被占用,如果此時掛起這個線程,可能立刻就發現資源可用,然后又需要花費很長的時間重新搶占鎖,時間代價就會非常的高。

   所以就有了樂觀鎖的概念,他的核心思路就是,每次不加鎖而是假設沒有沖突而去完成某項操作,如果因為沖突失敗就重試,直到成功為止。在上面的例子中,某個線程可以不讓出cpu,而是一直while循環,如果失敗就重試,直到成功為止。所以,當數據爭用不嚴重時,樂觀鎖效果更好。比如我們要說的AtomicInteger底層同步CAS就是一種樂觀鎖思想的應用。

CAS

  CAS就是Compare and Swap的意思,比較并操作。很多的cpu直接支持CAS指令。CAS是項樂觀鎖技術,當多個線程嘗試使用CAS同時更新同一個變量時,只有其中一個線程能更新變量的值,而其它線程都失敗,失敗的線程并不會被掛起,而是被告知這次競爭中失敗,并可以再次嘗試。CAS有3個操作數,內存值V,預期值A,要修改的新值B。當且僅當預期值A和內存值V相同時,將內存值V修改為B,否則什么都不做。

AtomicInteger

public int a = 1;public boolean compareAndSwapInt(int b) { if (a == 1) { a = b; return true; } return false;}

線程A執行到 a==1,正準備執行a = b時,線程B也正在運行a = b,并在線程A之前把a修改為2;最后線程A又把a修改成了3。結果就是兩個線程同時修改了變量a,顯然這種結果是無法符合預期的,無法確定a的值。 解決方法也很簡單,在compareAndSwapInt方法加鎖同步,變成一個原子操作,同一時刻只有一個線程才能修改變量a。

CAS中的比較和替換是一組原子操作,不會被外部打斷,先根據paramLong/paramLong1獲取到內存當中當前的內存值V,在將內存值V和原值A作比較,要是相等就修改為要修改的值B,屬于硬件級別的操作,效率比加鎖操作高。

java.util.concurrent.atomic包下的原子操作類都是基于CAS實現的,接下去我們通過AtomicInteger來看看是如何通過CAS實現原子操作的:

//jdk1.8實現public final int getAndAdd(int delta) { return unsafe.getAndAddInt(this, valueOffset, delta);}public final int getAndAddInt(Object var1, long var2, int var4) { int var5; do { var5 = this.getIntVolatile(var1, var2); } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4)); return var5;}

在jdk1.8中,比較和替換操作放在unsafe類中實現。

假設現在線程A和線程B同時執行getAndAdd操作:

AtomicInteger里面的value原始值為3,即主內存中AtomicInteger的value為3,根據Java內存模型,線程A和線程B各自持有一份value的副本,值為3。線程A通過getIntVolatile(var1, var2)方法獲取到value值3,線程切換,線程A掛起。線程B通過getIntVolatile(var1, var2)方法獲取到value值3,并利用compareAndSwapInt方法比較內存值也為3,比較成功,修改內存值為2線程切換,線程B掛起。線程A恢復,利用compareAndSwapInt方法比較,發手里的值3和內存值4不一致,此時value正在被另外一個線程修改,線程A不能修改value值。線程的compareAndSwapInt實現,循環判斷,重新獲取value值,因為value是volatile變量,所以線程對它的修改,線程A總是能夠看到。線程A繼續利用compareAndSwapInt進行比較并替換,直到compareAndSwapInt修改成功返回true。

整個過程中,利用CAS保證了對于value的修改的線程安全性。value 在AtomicInteger類中是volatile修飾,保證了多線程下的可見性。 Unsafe是CAS的核心類,Java無法直接訪問底層操作系統,而是通過本地(native)方法來訪問。不過盡管如此,JVM還是開了一個后門,JDK中有一個類Unsafe,它提供了硬件級別的原子操作 Unsafe類中的compareAndSwapInt方法 。是一個本地方法調用C++代碼


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩经典第一页| 在线成人激情黄色| 亚洲黄色成人网| 日韩一区二区三区在线播放| 精品一区二区亚洲| 国产精品青草久久久久福利99| 国产午夜精品一区二区三区| 亚洲激情久久久| 久久五月情影视| 夜夜嗨av色一区二区不卡| 欧美天天综合色影久久精品| 国产精品久久久久999| 亚洲最新av在线| 亚洲精品久久久一区二区三区| 日韩成人xxxx| 欧美日韩亚洲国产一区| 欧美久久精品午夜青青大伊人| 成人乱人伦精品视频在线观看| 欧美午夜宅男影院在线观看| 亚洲欧美日韩另类| 伊人男人综合视频网| 亚洲综合成人婷婷小说| 成人伊人精品色xxxx视频| 欧美精品18videosex性欧美| 伦理中文字幕亚洲| 91精品国产91久久久久福利| 免费av在线一区| 中文字幕日韩精品在线| 国产日韩精品在线观看| 日韩成人在线视频| 91产国在线观看动作片喷水| 91视频国产一区| 日韩在线视频中文字幕| 色综合五月天导航| 欧美激情精品久久久久久久变态| 高清欧美性猛交| 亚洲成av人影院在线观看| 国内精品伊人久久| 日韩在线视频二区| 亚洲区免费影片| 91精品久久久久久久久中文字幕| 国产美女精品视频免费观看| 热久久99这里有精品| 欧美日韩国产一区二区| 亚洲免费成人av电影| 国产午夜精品一区理论片飘花| 精品久久在线播放| 国产成人在线一区| 国产亚洲精品久久久优势| 精品自在线视频| 国产精品v片在线观看不卡| 国产精品一二三在线| 亚洲免费电影一区| 热re91久久精品国99热蜜臀| 欧美成人精品一区二区| 国产日韩专区在线| 性色av一区二区三区在线观看| 一区二区成人av| 在线亚洲午夜片av大片| 亚洲日韩中文字幕在线播放| 最近2019年中文视频免费在线观看| 国产精品久久久久久久久久新婚| 亚洲成人激情在线观看| 国产精品自产拍在线观看中文| 亚洲欧美一区二区三区在线| 精品成人在线视频| 国产精品久久久久久久app| 久久精品成人一区二区三区| 精品动漫一区二区三区| 国内精久久久久久久久久人| 精品欧美国产一区二区三区| 国产欧美日韩精品丝袜高跟鞋| 久久偷看各类女兵18女厕嘘嘘| 亚洲视频在线观看网站| 亚洲综合第一页| 久久久久国产视频| 国产亚洲一级高清| 欧美在线性视频| 日韩国产高清视频在线| 中文字幕亚洲在线| 国a精品视频大全| 亚洲第一福利在线观看| 久久精视频免费在线久久完整在线看| 成人欧美一区二区三区黑人| 久久久久一本一区二区青青蜜月| 亚洲欧美一区二区三区情侣bbw| 在线观看久久av| 国产99视频在线观看| 亚洲欧洲一区二区三区久久| 97在线视频免费看| 亚洲综合精品伊人久久| 精品毛片三在线观看| 最近2019中文字幕一页二页| 久久久久久久一| 日韩有码片在线观看| 色诱女教师一区二区三区| 欧美国产精品人人做人人爱| 国产精品久久久久久久美男| 精品视频久久久| 日本成人在线视频网址| 欧美裸体男粗大视频在线观看| 97色在线播放视频| 8050国产精品久久久久久| 亚洲a一级视频| 日韩在线视频导航| 日韩一区二区久久久| 久久好看免费视频| 日韩欧美aⅴ综合网站发布| 午夜精品久久久久久久久久久久久| 欧美巨猛xxxx猛交黑人97人| 欧美日韩在线一区| 国产一区二区成人| 欧美日韩国产91| 久久夜精品va视频免费观看| 97精品国产97久久久久久免费| 欧美极品少妇与黑人| 亚洲欧洲xxxx| 亚洲性生活视频| 日韩精品中文在线观看| 久久天天躁狠狠躁夜夜av| 97av在线视频免费播放| 国产精品爽爽爽爽爽爽在线观看| 69久久夜色精品国产69乱青草| 成人免费直播live| 亚洲国产天堂网精品网站| 在线播放国产精品| 欧美第一页在线| 欧美国产在线视频| 久久av在线看| 久久久国产在线视频| 亚洲a级在线观看| 国产精品一区二区三区毛片淫片| 国产精品电影一区| 欧美在线日韩在线| 欧美性xxxxx极品娇小| 色悠久久久久综合先锋影音下载| 在线观看日韩www视频免费| 久久久久久中文字幕| 在线播放日韩欧美| 亚洲电影在线观看| 亚洲精品综合久久中文字幕| 国产又爽又黄的激情精品视频| 高潮白浆女日韩av免费看| 精品日韩中文字幕| 97香蕉久久超级碰碰高清版| 国产精品久久中文| 久久伊人91精品综合网站| 日韩精品久久久久久久玫瑰园| 亚洲午夜精品久久久久久久久久久久| 欧美精品久久久久久久免费观看| 久久视频在线播放| 国产精品久久久久久av福利| 九九热精品视频在线播放| 国产精品自拍偷拍| 97在线看免费观看视频在线观看| 欧美亚洲视频在线看网址| 国产成人鲁鲁免费视频a| 国产偷亚洲偷欧美偷精品| 国产精品美女免费| 久久99久国产精品黄毛片入口| 黑人精品xxx一区一二区| 亚洲国产精品va| 久久精品久久精品亚洲人| 国产在线观看91精品一区|