網頁

2019/5/18

Java java.util.concurrent.atomic.AtomicInteger用途

AtomicIntegerjava.util.concurrent.atomic package下其他的數值類別提供了防鎖死(lock-free),執行緒安全(thread-safe)的原子操作。

一般的整數變數,也就是用intInteger宣告的變數,在進行累加累減的計算是非執行緒安全的(non-thread-safe),因此在多執行緒的環境下應避免使用普通的整數變數進行計算;

public class Counter {

    private int count = 0;

    public int count() {
        return count++; // 非執行緒安全,因為其相當於counter = counter + 1;
    }
}

進行counter++累加計算時,實際上是counter = counter + 1,也就是先從變數counter取出值,加上1,然後放回counter變數中,在多執行緒環境時,從counter取出數值的時候就有可能是另一條執行緒而導致非預期的結果。


AtomicInteger因為有執行緒安全的機制,所以其用於在多執行緒的環境下對整數進行累加或累減等運算,避免因為執行緒干涉造成非預期的結果。

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicCounter {

    private AtomicInteger atomicInteger = new AtomicInteger();

    public int count() {
        return atomicInteger.getAndIncrement(); // thread-safe
    }
}


沒有留言:

張貼留言