成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

AtomicInteger的decrementAndGet方法簡(jiǎn)單分析

JasonZhang / 1843人閱讀

摘要:調(diào)用獲取字段在對(duì)象中的偏移量其實(shí)就是一個(gè)字段到對(duì)象頭部的偏移量,通過(guò)這個(gè)偏移量可以快速定位字段定義為類型,保證在多線程中的可見性調(diào)用參數(shù)為當(dāng)前對(duì)象,偏移量,操作值最后是由于獲取的值為交換前的值通過(guò)返回循環(huán)獲取最新內(nèi)存值方法包含兩個(gè)參數(shù)

unsafe.objectFieldOffset

調(diào)用unsafe.objectFieldOffset獲取value字段在對(duì)象中的偏移量(其實(shí)就是一個(gè)字段到對(duì)象頭部的偏移量,通過(guò)這個(gè)偏移量可以快速定位字段)

static {
    try {
        valueOffset = unsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField("value"));
    } catch (Exception ex) { 
        throw new Error(ex); 
    }
}

定義value為volatile類型,保證value在多線程中的可見性

private volatile int value;
decrementAndGet

調(diào)用unsafe.getAndAddInt,參數(shù)為當(dāng)前對(duì)象,偏移量,操作值

/**
 * Atomically decrements by one the current value.
 *
 * @return the updated value
 */
public final int decrementAndGet() {
    //最后-1是由于getAndAddInt獲取的值為交換前的值
    return unsafe.getAndAddInt(this, valueOffset, -1) - 1;
}

getAndAddInt

通過(guò)compareAndSwapInt返回循環(huán)getIntVolatile獲取最新內(nèi)存值

public final int getAndAddInt(Object var1, long var2, int var4) {
    int var5;
    do {
        var5 = this.getIntVolatile(var1, var2);
    } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
    return var5;
}

getIntVolatile

方法包含兩個(gè)參數(shù),當(dāng)前對(duì)象,偏移量;獲取內(nèi)存地址指向的整數(shù),并支持volatile語(yǔ)義

public native int getIntVolatile(Object var1, long var2);

compareAndSwapInt

方法包含了四個(gè)參數(shù),當(dāng)前對(duì)象,偏移量,期望值,新值;如果當(dāng)前對(duì)象對(duì)應(yīng)偏移量的值與期望值相同,則把當(dāng)前對(duì)象的值更改為新值,并返回true;否則返回false

public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73340.html

相關(guān)文章

  • AtomicInteger原理

    摘要:提供這些原子類的目的就是為了解決基本類型操作的非原子性導(dǎo)致在多線程并發(fā)情況下引發(fā)的問(wèn)題。測(cè)試代碼引發(fā)的線程問(wèn)題最終的值為如果是原子操作,那么結(jié)果應(yīng)該就是,反復(fù)運(yùn)行幾次發(fā)現(xiàn)結(jié)果大部分情況下都不是,這也證明了的非原子性在多線程下產(chǎn)生的問(wèn)題。 AtomicInteger的原理 java的并發(fā)原子包里面提供了很多可以進(jìn)行原子操作的類,比如: AtomicInteger AtomicBoole...

    tuantuan 評(píng)論0 收藏0
  • Java? 教程(原子變量)

    原子變量 java.util.concurrent.atomic包定義了支持單個(gè)變量的原子操作的類,所有類都有g(shù)et和set方法,類似于對(duì)volatile變量的讀寫操作,也就是說(shuō),set與在同一個(gè)變量上任何后續(xù)的get具有先發(fā)生關(guān)系,compareAndSet原子方法也具有這些內(nèi)存一致性特性,適用于整數(shù)原子變量的簡(jiǎn)單原子算法也是如此。 要查看如何使用此包,讓我們返回我們最初用于演示線程干擾的Cou...

    bang590 評(píng)論0 收藏0
  • java并發(fā)實(shí)戰(zhàn):連接池實(shí)現(xiàn)

    摘要:池化技術(shù)簡(jiǎn)介在我們使用數(shù)據(jù)庫(kù)的過(guò)程中,我們往往使用數(shù)據(jù)庫(kù)連接池而不是直接使用數(shù)據(jù)庫(kù)連接進(jìn)行操作,這是因?yàn)槊恳粋€(gè)數(shù)據(jù)庫(kù)連接的創(chuàng)建和銷毀的代價(jià)是昂貴的,而池化技術(shù)則預(yù)先創(chuàng)建了資源,這些資源是可復(fù)用的這樣就保證了在多用戶情況下只能使用指定數(shù)目的資 池化技術(shù)簡(jiǎn)介 在我們使用數(shù)據(jù)庫(kù)的過(guò)程中,我們往往使用數(shù)據(jù)庫(kù)連接池而不是直接使用數(shù)據(jù)庫(kù)連接進(jìn)行操作,這是因?yàn)槊恳粋€(gè)數(shù)據(jù)庫(kù)連接的創(chuàng)建和銷毀的代價(jià)是昂貴...

    XboxYan 評(píng)論0 收藏0
  • Java多線程進(jìn)階(十三)—— J.U.C之a(chǎn)tomic框架:AtomicInteger

    摘要:顧名思義,是類型的線程安全原子類,可以在應(yīng)用程序中以原子的方式更新值。創(chuàng)建對(duì)象先來(lái)看下對(duì)象的創(chuàng)建。也就是說(shuō)當(dāng)一個(gè)線程修改一個(gè)共享變量時(shí),其它線程能立即讀到這個(gè)修改的值。 showImg(https://segmentfault.com/img/remote/1460000016012210); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... ...

    darkbug 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<