欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JAVA中哪些地方用到CAS

這篇文章主要講解了“JAVA中哪些地方用到CAS”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“JAVA中哪些地方用到CAS”吧!

成都創(chuàng)新互聯(lián)公司專注于石屏企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城開發(fā)。石屏網(wǎng)站建設(shè)公司,為石屏等地區(qū)提供建站服務(wù)。全流程按需規(guī)劃網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

什么是CAS

CAS 全稱compareAndSet,比較并交換的意思,CAS為無鎖操作(其實就是CPU級別的鎖,跟操作系統(tǒng)沒關(guān)系,而且CPU級別的鎖比較快)。

顧名思義CAS操作分為兩步,先比較后交換。既然要進(jìn)行比較然后在進(jìn)行交換,那肯定是涉及到了三個參數(shù),自己V、和誰進(jìn)行比較 E、比較完之后需要修改成誰 U。

V即為需要進(jìn)行比較的參數(shù),E為變量在內(nèi)存中的最新值,U為需要修改的值。CAS在接收到三個參數(shù)后,先對V和E進(jìn)行比較,如果V=E證明變量V沒有被其他線程修改過,CAS就會把V替換成U;如V != E 證明這個變量已經(jīng)被其他線程修改了,所以CVS認(rèn)為本次操作是一次無效操作,不會進(jìn)行任何操作。

//JDK版本為 jdk1.8.0_161
 public static void main(String[] args) {
        // 1
        AtomicInteger atomicInteger = new AtomicInteger(10);
        // 2
        boolean flag = atomicInteger.compareAndSet(10, 11);
        System.out.println(flag); // true
        // 3
        flag = atomicInteger.compareAndSet(10, 11);
        System.out.println(flag);// false
 }

上面代碼中,第一步是定義了一個原子性的整數(shù)類型atomicInteger,它的值為10;第二步對這個value進(jìn)行CAS操作,因為AtomicInteger對CAS進(jìn)行了封裝,V永遠(yuǎn)是AtomicInteger內(nèi)部的value,所以第二步的CAS少了V這個參數(shù),CAS拿到atomicInteger變量的value和傳進(jìn)去的第一個參數(shù)進(jìn)行比較,通過比較發(fā)現(xiàn)value = 10 這個條件是成立的,于是就把第二個參數(shù)11替換成了原來的10(整個第二步是原子性操作),并且返回一個boolean類型的操作成功true;第三步CAS又拿著自己的value 11(因為在第二步已經(jīng)替換成為11了)和第一個參數(shù) 10 進(jìn)行比較,通過比較發(fā)現(xiàn)11 != 10 條件不成立,于是不進(jìn)行任何操作,并且返回一個boolean類型的操作失敗 false。

JAVA中哪些地方用到來CAS

目前CAS在jdk中主要應(yīng)用在J.U.C相關(guān)包下的Atomic相關(guān)類中,主要有AtomicInteger、AtomicLong、AtomicBoolean、AtomicDouble、AtomicReference、AtomicReferenceFieldUpdater等。

以AtomicInteger類下的getAndUpdate為例 :

/**
  * Atomically updates the current value with the results of
  * applying the given function, returning the previous value. The
  * function should be side-effect-free, since it may be re-applied
  * when attempted updates fail due to contention among threads.
  *
  * @param updateFunction a side-effect-free function
  * @return the previous value
  * @since 1.8
  */
public final int getAndUpdate(IntUnaryOperator updateFunction) {
    int prev, next;
    do {
        prev = get();
        next = updateFunction.applyAsInt(prev);
    } while (!compareAndSet(prev, next));
    return prev;
}

/**
  * Gets the current value.
  *
  * @return the current value
  */
public final int get() {
    return value;
}

第一步:首先通過get()方法獲取到當(dāng)前對象的value。

第二步:updateFunction為函數(shù)引用,不過他的操作也是為了賦值,并返回預(yù)期結(jié)果。

第三步:進(jìn)行CAS操作,傳入第一步get()獲取到的值和目前對象中的值進(jìn)行比較,如果一樣就修改為next,不一樣就繼續(xù)循環(huán),直到CAS操作返回true為止。

第四步:返回當(dāng)前獲取到的值prev。

感謝各位的閱讀,以上就是“JAVA中哪些地方用到CAS”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對JAVA中哪些地方用到CAS這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

分享文章:JAVA中哪些地方用到CAS
文章位置:http://aaarwkj.com/article44/pccche.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計公司面包屑導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
日韩精品中文字幕欧美乱| 在线观看国产自拍精品| 蜜桃久久国产精品一区二区| 亚洲精品人妻av在线| 久草热不卡的av在线| 最新国产av网址大全| 在线天堂一区二区三区| 国产亚洲一线二线三线| av在线免费观看青青草原| 人妻熟女一区二区视频| 老女人性生交大片免费| 国产日韩欧美一区二区三区四区| 涩涩涩丁香色婷五月网| 国产精品传媒免费在线观看| 日本成人一区二区在线播放| 欧美视频免费一级黄片| av免费在线不卡一区| 日韩精品在线中文字幕| 国产精品亚洲在线视频| 欧美二区三区精品在线| 中文字幕久久熟女蜜桃| 国产日产精品一区二区三区四区| 日韩精品人妻一区二区免| 国产美女被狂操到高潮| 欧美精品亚洲精品日韩经典| 日韩精品一二区电影| 亚洲国产精品久久久久久99| 日韩中字在线一区二区| 亚洲黄色av网站在线| 日韩日美日韩av影视| 亚洲啪啪av一区二区三区| 要爽死国产一区在线播放| 欧美精品国产欧美精品国产| 国产一区二区黄色在线| 亚洲欧美日韩一区中文天国| 亚洲综合久久精品少妇av| 一级欧美黄片在线播放| 亚洲精品人妻av在线| 91精品国产老熟女在线 | 日韩精品中文字幕免费人妻| 91国产精品视频在线|