AtomicInteger

AtomicIntegerjava.util.concurrent.atomic 包下的其中一個 class,

它提供了一個原子操作的 Integer,

也就是說它可以在多線程環境下進行安全的操作,

可以避免多線程環境變數的競爭問題,

以下是一些常用的方法

get()

get() 方法可以取得目前的值:

AtomicInteger atomicInteger = new AtomicInteger(0); // 這邊可以預設初始值
int value = atomicInteger.get(); // 0

set()

set() 方法可以設定目前的值:

AtomicInteger atomicInteger = new AtomicInteger(0);
atomicInteger.set(1);
int value = atomicInteger.get(); // 1

getAndSet()

getAndSet() 方法可以取得目前的值,

並且設定新的值:

AtomicInteger atomicInteger = new AtomicInteger(0);
int value = atomicInteger.getAndSet(1); // 因為先取後加, 所以為 0
value = atomicInteger.get(); // 再取一次為 1

incrementAndGet()

incrementAndGet() 方法可以將目前的值加 1,

並且回傳新的值:

AtomicInteger atomicInteger = new AtomicInteger(0);
int value = atomicInteger.incrementAndGet(); // 1
value = atomicInteger.get(); // 再取一次為 1

decrementAndGet()

decrementAndGet() 方法可以將目前的值減 1,

並且回傳新的值:

AtomicInteger atomicInteger = new AtomicInteger(0);
int value = atomicInteger.decrementAndGet(); // -1
value = atomicInteger.get(); // 再取一次為 -1

getAndIncrement()

getAndIncrement() 方法可以先取得目前的值,

並且將目前的值加 1:

AtomicInteger atomicInteger = new AtomicInteger(0);
int value = atomicInteger.getAndIncrement(); // 0
value = atomicInteger.get(); // 再取一次為 1

getAndDecrement()

getAndDecrement() 方法可以先取得目前的值,

並且將目前的值減 1:

AtomicInteger atomicInteger = new AtomicInteger(0);
int value = atomicInteger.getAndDecrement(); // 0
value = atomicInteger.get(); // 再取一次為 -1

addAndGet()

addAndGet() 方法可以將目前的值加上指定的值,

並且回傳新的值:

AtomicInteger atomicInteger = new AtomicInteger(0);
int value = atomicInteger.addAndGet(2); // 2
value = atomicInteger.get(); // 再取一次為 2

getAndAdd()

getAndAdd() 方法可以先取得目前的值,

並且將目前的值加上指定的值:

AtomicInteger atomicInteger = new AtomicInteger(0);
int value = atomicInteger.getAndAdd(2); // 0
value = atomicInteger.get(); // 再取一次為 2

compareAndSet()

compareAndSet() 方法可以比較目前的值是否等於指定的值,

如果相等就設定新的值:

AtomicInteger atomicInteger = new AtomicInteger(0);
boolean result = atomicInteger.compareAndSet(0, 1); // true
int value = atomicInteger.get(); // 1