真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【AtomicInteger】常規(guī)用法-創(chuàng)新互聯(lián)

眾所周知,AtomicInteger用于多線程下線程安全的數(shù)據(jù)讀寫操作,避免使用鎖同步,底層采用CAS實(shí)現(xiàn),內(nèi)部的存儲值使用volatile修飾,因此多線程之間是修改可見的。

企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴(kuò)展宣傳的重要窗口,一個合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺,成都創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:成都咖啡廳設(shè)計成都網(wǎng)站設(shè)計網(wǎng)絡(luò)營銷推廣解決方案、網(wǎng)站設(shè)計等建站排名服務(wù)。

1. 構(gòu)造

public AutomicInteger(int initValue): 有參構(gòu)造,初始化為initValue

public AutomicInteger(): 無參構(gòu)造,相當(dāng)于AutomicInteger(0)

2. 自增1

public int getAndIncrement(): 返回當(dāng)前值,并自增1

AtomicInteger ai = new AtomicInteger(5);

ai.getAndIncrement(); // 5
ai.get(); // 6

public int incrementAndGet(): 先自增1,再返回自增后的值

AtomicInteger ai = new AtomicInteger(5);?
ai.incrementAndGet(); // 6
ai.get(); // 6

3. 自減1?

public int getAndDecrement(): 返回當(dāng)前值,并自減1

AtomicInteger ai = new AtomicInteger(5);

ai.getAndDecrement(); // 5
ai.get(); // 4

public int decrementAndGet(): 自減1,?返回自減后的值

AtomicInteger ai = new AtomicInteger(5);

ai.decrementAndGet(); // 4
ai.get(); // 4

4. 如果原來是A,則更新成B?

public boolean compareAndSet(int source, int dest):source是改之前的值,Dest是改之后的值,source與當(dāng)前真實(shí)值匹配了才能執(zhí)行成功,返回值表示是否執(zhí)行成功。

AtomicInteger ai = new AtomicInteger(10);

ai.compareAndSet(100, 12); // false, 因?yàn)楦闹安皇?00
ai.get(); // 10

ai.compareAndSet(10, 12); // true

ai.get(); // 12

5. 自增/自減N?

public int getAndAdd(int delta): 先獲取當(dāng)前值,再進(jìn)行計算val = val + delta

AtomicInteger ai = new AtomicInteger(10);
ai.getAndAdd(2); // 10

ai.get(); // 12

public int addAndGet(int delta): 先計算?val = val + delta,再返回最新值

AtomicInteger ai = new AtomicInteger(10);
ai.addAndGet(2); // 12

ai.get(); //?12

當(dāng)然,這個方法也支持負(fù)數(shù)參數(shù),也就意味著可以做減法

AtomicInteger ai = new AtomicInteger(5);
System.out.println(ai.addAndGet(-1)); // 4

6. 硬編碼的二元計算邏輯

public int getAndUpdate?(IntUnaryOperator opeartion): 使用lambda表達(dá)式進(jìn)行二元運(yùn)算,獲取到的是舊值。

AtomicInteger ai = new AtomicInteger(10);
ai.getAndUpdate(x ->x + 2); // 10, oldVal
ai.get(); // 12

public int updateAndGet (IntUnaryOperator opeartion): 使用lambda表達(dá)式進(jìn)行二元運(yùn)算,獲取到的是新值。

AtomicInteger ai = new AtomicInteger(10);
ai.updateAndGet(x ->x + 2); // 12, newVal
ai.get(); // 12

當(dāng)然,這里支持減法也同樣沒問題

AtomicInteger ai = new AtomicInteger(5);
System.out.println(ai.updateAndGet(val ->val - 1)); // 4

7.? 非硬編碼的二元運(yùn)算邏輯

public int getAndAccumulate(int factor, IntBinaryOperator operation): 先返回舊值,再進(jìn)行計算

AtomicInteger ai = new AtomicInteger(10);
int result = ai.getAndAccumulate(5, new IntBinaryOperator() {

@Override
    public int applyAsInt(int left, int right){
????????return left + right;
} }); 

// result = 10, 舊值
ai.get(); // 15新值

public int accumulateAndGet(int factor, IntBinaryOperator operation): 先計算,再返回新值

AtomicInteger ai = new AtomicInteger(10);

int result = ai.accumulateAndGet(5, Integer::sum); // 15
ai.get(); // 15

同樣,這個方法的自由度大大提高

int val = -1;
AtomicInteger ai = new AtomicInteger(5);
System.out.println(ai.accumulateAndGet(val, (a, b)->b-a)); // -6

8. 直接賦值

public void set(int newVal): 直接更新為新值,區(qū)別于compareAndSet需要比對舊值。

9. 直接取值

public int get(): 取最新值

附:

底層的CAS是操作系統(tǒng)級別的實(shí)現(xiàn):

public final boolean compareAndSet(int expect, int update) {

return unsafe.compareAndSwapInt(this, valueOffset, expect, update);

}

自旋式樂觀鎖實(shí)現(xiàn)數(shù)值更新

public final int getAndAddInt(Object object, long valueOffset, int delta) {

int currentValue;
    do {
????????currentValue= this.getIntVolatile(object, valueOffset);
?   } while(!this.compareAndSwapInt(object, valueOffset, currentValue,                                     currentValue + delta));
    return currentValue;
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


本文題目:【AtomicInteger】常規(guī)用法-創(chuàng)新互聯(lián)
鏈接URL:http://weahome.cn/article/dgioeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部