AtomicInteger
AtomicInteger 是 java.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