bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

JAVA中哪些地方用到CAS

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

成都創新互聯公司專注于石屏企業網站建設,響應式網站,商城開發。石屏網站建設公司,為石屏等地區提供建站服務。全流程按需規劃網站,專業設計,全程項目跟蹤,成都創新互聯公司專業和態度為您提供的服務

什么是CAS

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

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

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

//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
 }

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

JAVA中哪些地方用到來CAS

目前CAS在jdk中主要應用在J.U.C相關包下的Atomic相關類中,主要有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()方法獲取到當前對象的value。

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

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

第四步:返回當前獲取到的值prev。

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

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

成都網站建設公司_創新互聯,為您提供網站設計網頁設計公司、面包屑導航、外貿網站建設、自適應網站、商城網站

廣告

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

h5響應式網站建設