亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java并發(fā)編程之cas詳解

 更新時間:2017年11月03日 15:12:35   投稿:mengwei  
這篇文章主要介紹了java并發(fā)編程之cas詳解,涉及cas使用場景和cas用作原子操作等內(nèi)容,具有一定參考價值,需要的朋友可以了解下。

CAS(Compare and swap)比較和替換是設(shè)計并發(fā)算法時用到的一種技術(shù)。簡單來說,比較和替換是使用一個期望值和一個變量的當前值進行比較,如果當前變量的值與我們期望的值相等,就使用一個新值替換當前變量的值。這聽起來可能有一點復(fù)雜但是實際上你理解之后發(fā)現(xiàn)很簡單,接下來,讓我們跟深入的了解一下這項技術(shù)。

CAS的使用場景

在程序和算法中一個經(jīng)常出現(xiàn)的模式就是“check and act”模式。先檢查后操作模式發(fā)生在代碼中首先檢查一個變量的值,然后再基于這個值做一些操作。下面是一個簡單的示例:

class MyLock {
  private boolean locked = false;
  public boolean lock() {
    if(!locked) {
      locked = true;
      return true;
    }
    return false;
  }
}

上面這段代碼,如果用在多線程的程序會出現(xiàn)很多錯誤,不過現(xiàn)在請忘掉它。

如你所見,lock()方法首先檢查locked>成員變量是否等于false,如果等于,就將locked設(shè)為true。

如果同個線程訪問同一個MyLock實例,上面的lock()將不能保證正常工作。如果一個線程檢查locked的值,然后將其設(shè)置為false,與此同時,一個線程B也在檢查locked的值,又或者,在線程A將locked的值設(shè)為false之前。因此,線程A和線程B可能都看到locked的值為false,然后兩者都基于這個信息做一些操作。

為了在一個多線程程序中良好的工作,”checkthenact”操作必須是原子的。原子就是說”check“操作和”act“被當做一個原子代碼塊執(zhí)行。不存在多個線程同時執(zhí)行原子塊。

下面是一個代碼示例,把之前的lock()方法用synchronized關(guān)鍵字重構(gòu)成一個原子塊。

class MyLock {
  private boolean locked = false;
  public synchronized boolean lock() {
    if(!locked) {
      locked = true;
      return true;
    }
    return false;
  }
}

現(xiàn)在lock()方法是同步的,所以,在某一時刻只能有一個線程在同一個MyLock實例上執(zhí)行它。

原子的lock方法實際上是一個”compare and swap“的例子。

CAS用作原子操作

現(xiàn)在CPU內(nèi)部已經(jīng)執(zhí)行原子的CAS操作。Java5以來,你可以使用java.util.concurrent.atomic包中的一些原子類來使用CPU中的這些功能。

下面是一個使用AtomicBoolean類實現(xiàn)lock()方法的例子:

public static class MyLock {
  private AtomicBoolean locked = new AtomicBoolean(false);
  public boolean lock() {
    return locked.compareAndSet(false, true);
  }
}

locked變量不再是boolean類型而是AtomicBoolean。這個類中有一個compareAndSet()方法,它使用一個期望值和AtomicBoolean實例的值比較,和兩者相等,則使用一個新值替換原來的值。在這個例子中,它比較locked的值和false,如果locked的值為false,則把修改為true。

如果值被替換了,compareAndSet()返回true,否則,返回false。

使用Java5+提供的CAS特性而不是使用自己實現(xiàn)的的好處是Java5+中內(nèi)置的CAS特性可以讓你利用底層的你的程序所運行機器的CPU的CAS特性。這會使還有CAS的代碼運行更快。

總結(jié)

以上就是關(guān)于java并發(fā)編程之cas詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Java系統(tǒng)的高并發(fā)解決方法詳解、Java并發(fā)編程之重入鎖與讀寫鎖、Java并發(fā)編程Semaphore計數(shù)信號量詳解等,有什么問題可以隨時留言,歡迎您的寶貴意見,小編會及時回復(fù)大家的。感謝朋友們對本站的支持!

相關(guān)文章

  • 實例講解Java并發(fā)編程之閉鎖

    實例講解Java并發(fā)編程之閉鎖

    這篇文章主要介紹了實例講解Java并發(fā)編程之閉鎖,閉鎖相當于一扇門,在閉鎖到達結(jié)束狀態(tài)之前,這扇門一直是關(guān)閉著的,沒有任何線程可以通過,當?shù)竭_結(jié)束狀態(tài)時,這扇門才會打開并容許所有線程通過,需要的朋友可以參考下
    2015-04-04
  • MyBatisPlus批量添加的優(yōu)化與報錯解決

    MyBatisPlus批量添加的優(yōu)化與報錯解決

    MybatisPlus是一個高效的java持久層框架,它在Mybatis的基礎(chǔ)上增加了一些便捷的功能,提供了更加易用的API,可以大幅度提高開發(fā)效率,這篇文章主要給大家介紹了關(guān)于MyBatisPlus批量添加的優(yōu)化與報錯解決的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 如何用Java模擬XN*2圖靈機

    如何用Java模擬XN*2圖靈機

    這篇文章主要介紹了如何用Java模擬XN*2圖靈機方法,感興趣的朋友可以參考下
    2021-04-04
  • java實現(xiàn)注冊登錄系統(tǒng)

    java實現(xiàn)注冊登錄系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)注冊登錄系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • springboot+thymeleaf+druid+mybatis 多模塊實現(xiàn)用戶登錄功能

    springboot+thymeleaf+druid+mybatis 多模塊實現(xiàn)用戶登錄功能

    這篇文章主要介紹了springboot+thymeleaf+druid+mybatis 多模塊實現(xiàn)用戶登錄功能,本文通過示例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • spring框架cacheAnnotation緩存注釋聲明解析

    spring框架cacheAnnotation緩存注釋聲明解析

    這篇文章主要介紹了spring框架中cacheAnnotation注釋聲明緩存解析示例有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • JDK源碼Enum類原理及代碼實例解析

    JDK源碼Enum類原理及代碼實例解析

    這篇文章主要介紹了JDK源碼Enum類原理及代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Aop動態(tài)代理和cglib實現(xiàn)代碼詳解

    Aop動態(tài)代理和cglib實現(xiàn)代碼詳解

    這篇文章主要介紹了Aop動態(tài)代理和cglib實現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • 關(guān)于Java8 parallelStream并發(fā)安全的深入講解

    關(guān)于Java8 parallelStream并發(fā)安全的深入講解

    這篇文章主要給大家介紹了關(guān)于Java8 parallelStream并發(fā)安全的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Java排序算法總結(jié)之希爾排序

    Java排序算法總結(jié)之希爾排序

    這篇文章主要介紹了Java排序算法總結(jié)之希爾排序,較為詳細的分析了希爾排序的原理與java的實現(xiàn)技巧,需要的朋友可以參考下
    2015-05-05

最新評論