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

AtomicReference原子類如何在Java中使用

AtomicReference原子類如何在Java中使用?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

成都創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站建設(shè)、網(wǎng)站制作、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。

AtomicReference介紹和函數(shù)列表

AtomicReference是作用是對"對象"進(jìn)行原子操作。

AtomicReference函數(shù)列表

// 使用 null 初始值創(chuàng)建新的 AtomicReference。
AtomicReference()
// 使用給定的初始值創(chuàng)建新的 AtomicReference。
AtomicReference(V initialValue)
// 如果當(dāng)前值 == 預(yù)期值,則以原子方式將該值設(shè)置為給定的更新值。
boolean compareAndSet(V expect, V update)
// 獲取當(dāng)前值。
V get()
// 以原子方式設(shè)置為給定值,并返回舊值。
V getAndSet(V newValue)
// 最終設(shè)置為給定值。
void lazySet(V newValue)
// 設(shè)置為給定值。
void set(V newValue)
// 返回當(dāng)前值的字符串表示形式。
String toString()
// 如果當(dāng)前值 == 預(yù)期值,則以原子方式將該值設(shè)置為給定的更新值。
boolean weakCompareAndSet(V expect, V update)

AtomicReference源碼分析(基于JDK1.7.0_40)

在JDK1.7.0_40中AtomicReference.java的源碼如下:

public class AtomicReference<V> implements java.io.Serializable {
  private static final long serialVersionUID = -1848883965231344442L;
  // 獲取Unsafe對象,Unsafe的作用是提供CAS操作
  private static final Unsafe unsafe = Unsafe.getUnsafe();
  private static final long valueOffset;
  static {
   try {
    valueOffset = unsafe.objectFieldOffset
      (AtomicReference.class.getDeclaredField("value"));
   } catch (Exception ex) { throw new Error(ex); }
  }
  // volatile類型
  private volatile V value;
  public AtomicReference(V initialValue) {
    value = initialValue;
  }
  public AtomicReference() {
  }
  public final V get() {
    return value;
  }
  public final void set(V newValue) {
    value = newValue;
  }
  public final void lazySet(V newValue) {
    unsafe.putOrderedObject(this, valueOffset, newValue);
  }
  public final boolean compareAndSet(V expect, V update) {
    return unsafe.compareAndSwapObject(this, valueOffset, expect, update);
  }
  public final boolean weakCompareAndSet(V expect, V update) {
    return unsafe.compareAndSwapObject(this, valueOffset, expect, update);
  }
  public final V getAndSet(V newValue) {
    while (true) {
      V x = get();
      if (compareAndSet(x, newValue))
        return x;
    }
  }
  public String toString() {
    return String.valueOf(get());
  }
}

說明:

AtomicReference的源碼比較簡單。它是通過"volatile"和"Unsafe提供的CAS函數(shù)實現(xiàn)"原子操作。

(01) value是volatile類型。這保證了:當(dāng)某線程修改value的值時,其他線程看到的value值都是最新的value值,即修改之后的volatile的值。

(02) 通過CAS設(shè)置value。這保證了:當(dāng)某線程池通過CAS函數(shù)(如compareAndSet函數(shù))設(shè)置value時,它的操作是原子的,即線程在操作value時不會被中斷。

AtomicReference示例

// AtomicReferenceTest.java的源碼

import java.util.concurrent.atomic.AtomicReference;
public class AtomicReferenceTest {
  public static void main(String[] args){
    // 創(chuàng)建兩個Person對象,它們的id分別是101和102。
    Person p1 = new Person(101);
    Person p2 = new Person(102);
    // 新建AtomicReference對象,初始化它的值為p1對象
    AtomicReference ar = new AtomicReference(p1);
    // 通過CAS設(shè)置ar。如果ar的值為p1的話,則將其設(shè)置為p2。
    ar.compareAndSet(p1, p2);
    Person p3 = (Person)ar.get();
    System.out.println("p3 is "+p3);
    System.out.println("p3.equals(p1)="+p3.equals(p1));
  }
}
class Person {
  volatile long id;
  public Person(long id) {
    this.id = id;
  }
  public String toString() {
    return "id:"+id;
  }
}

運(yùn)行結(jié)果:

p3 is id:102
p3.equals(p1)=false

結(jié)果說明:

新建AtomicReference對象ar時,將它初始化為p1。

緊接著,通過CAS函數(shù)對它進(jìn)行設(shè)置。如果ar的值為p1的話,則將其設(shè)置為p2。

最后,獲取ar對應(yīng)的對象,并打印結(jié)果。p3.equals(p1)的結(jié)果為false,這是因為Person并沒有覆蓋equals()方法,而是采用繼承自O(shè)bject.java的equals()方法;而Object.java中的equals()實際上是調(diào)用"=="去比較兩個對象,即比較兩個對象的地址是否相等。

看完上述內(nèi)容,你們掌握AtomicReference原子類如何在Java中使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站題目:AtomicReference原子類如何在Java中使用
標(biāo)題鏈接:http://aaarwkj.com/article30/ijjhpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、標(biāo)簽優(yōu)化網(wǎng)站營銷、外貿(mào)網(wǎng)站建設(shè)、全網(wǎng)營銷推廣云服務(wù)器

廣告

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

網(wǎng)站托管運(yùn)營
精品视频在线观看传媒| 亚洲精品国产av一区二区三区 | 国产精品一区二区久久毛片| 少妇人妻精品一区二区三| 国产熟女肥臀精品国产馆乱| 饥渴少妇高潮露脸嗷嗷叫| 青青草国产成人自拍视频在线观看| 麻豆视频国产一区二区| 久久免费国产精品电影| 巴西老熟女大奶子多毛逼| 线上免费看黄色亚洲片| 国产精品神马午夜福利| 亚洲成人久久久久久久| 91久久国产综合精品女同| 欧美黄片免费在线视频| 亚洲免费av一区二区| 日韩女同一区二区三区在线观看 | 欧美一区二区三区精美| 不卡视频一区二区日韩| 日本精品动漫一区二区三区| 欧美日韩在线视频一区| 亚洲精品尤物福利在线一区| 国产精品一区二区剧情熟女| 日本在线观看成人大片| 丰满人妻二区三区性色| 激情男女一区二区三区| 天天精品国产av九九久久久| 免费国产网站在线观看不卡| 亚洲av成人精品日韩一区麻豆| av天堂最新资源在线| 中文字幕日韩午夜精品| 日韩精品欧美成人高清一区二区 | 午夜福利成人在线免费观看| 精品传媒国产在线观看| 欧美日韩天堂一区二区| 亚洲精品成人久久网| 熟女av一区二区三区四区| 91欧美激情另类亚洲| 国产一区二区主播不卡| 久久国产亚洲欧美一区| 在线中文字幕日韩有码|