亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java - AtomicInteger 的CAS 問題

瀏覽:85日期:2023-10-23 11:55:57

問題描述

public final int incrementAndGet() {for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next))return next;} }

這是自增操作,定義: CAS有3個操作數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值A和內存值V相同時,將內存值V修改為B,否則什么都不做預期值是next嗎? 內存值是current?假如1個線程自增時沒有其他線程競爭,那么預期值應該比內存值大1啊,怎么會預期值和內存值相同?

問題解答

回答1:

瀉藥~可能題主這里理解有點偏差

current是預期值,不是內存值

next是修改的新值不是預期值

方法compareAndSet的源碼就可以看得出來,里面注釋已經很明白了

/** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * * @param expect the expected value * @param update the new value * @return {@code true} if successful. False return indicates that * the actual value was not equal to the expected value. */ public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update); }

CAS的操作是按照題主所說,用預期值和內存值比較,只有當相等時,才會把新值寫入,否則會不斷重試,是一種樂觀的態度,而真正的內存值其實是AtomicInteger.value這個屬性(其實最關鍵也不是這個屬性,只是個引用而已,真正的boss后面會提到),注意這個value的有關鍵字volatile修飾

private volatile int value;

所以這個value值其實是一個共享變量,代表著這個變量的可見性,也就是線程之間的可見性,

=======================話多隨便扯了哈可見性,不喜可以直接略過================================

簡單點說,Java內存模型規定了變量是存在主存中(類似物理內存)的,各個線程都有自己的工作緩存,在對某個變量操作時,不是直接修改主存中的值,而是在自己的工作緩存中執行,最后在同步到主存中,并且線程相互之間的是不能訪問對方的工作緩存的

這里說到的可見性,就是指,線程在操作有關鍵字volatile修飾的變量時,當成功修改了這個變量并寫入了主存,那么其他線程的工作緩存中的變量會失效,所以此時其他線程再次去讀取變量時會直接從主存中去讀,而不會再用自己工作緩存中的值了

==========================================扯完==============================================

剛才說到AtomicInteger.value這個屬性對于數據本身而言,只是一個引用,在調用compareAndSet方法時,可以注意到第二個參數,valueOffset,其實這才是關鍵...真正的Boss,真正的內存的值,因為涉及到在java語言里很少聽到的一個詞,指針,這個valueOffset其實就是對象內的偏移量啦,這才是真正的內存值

(之所以這個方法compareAndSet里調用的是Unsafe類的方法,Unsafe這其實就是封裝了一些類似指針的操作,指針才不安全嘛)

標簽: java
相關文章:
主站蜘蛛池模板: 日韩欧美二区在线观看 | 午夜视频久久 | 九九视频在线看精品 | 青草伊伊 | 亚洲欧美偷拍视频 | 亚洲步兵一区二区三区 | 老妇毛片久久久久久久久 | 国内特级毛片 | 色噜噜狠狠一区二区三区 | 日本二级黄色 | 巨胸美女扒开腿让我爽 | 欧美日韩一区二区三区色综合 | 亚洲欧美在线视频免费 | 在线久综合色手机在线播放 | 国产精品久久久久久久久 | 在线看免费观看韩国特黄一级 | 碰碰人人| 国产男女乱淫真视频全程播放 | 亚洲午夜久久久久久91 | 看免费黄色一级视频 | 九九热国产视频 | 国产欧美一区二区 | 在线免费看网站 | 国产精品色综合久久 | 九九热精品国产 | 黑人巨大解禁久久中文字幕 | 美欧毛片| 日本免费人成网ww555在线 | 中文在线日本免费永久18近 | 91久久精品国产亚洲 | 日韩国产精品欧美一区二区 | 91久久精品日日躁夜夜躁欧美 | 欧美一区二区三区免费播放 | 国产伦一区二区三区免费 | 特黄的欧美毛片 | 亚洲精品视频在线观看免费 | 亚洲欧美日韩闷骚影院 | 日本亚洲中午字幕乱码 | 99热国产这里只有精品9九 | 日本二区免费一片黄2019 | 欧美极品福利视频在线播放 |