java.util.concurrent.atomic包定義了支持單個變量的原子操做的類,全部類都有get
和set
方法,相似於對volatile
變量的讀寫操做,也就是說,set
與在同一個變量上任何後續的get
具備先發生關係,compareAndSet
原子方法也具備這些內存一致性特性,適用於整數原子變量的簡單原子算法也是如此。html
要查看如何使用此包,讓咱們返回咱們最初用於演示線程干擾的Counter類:java
class Counter { private int c = 0; public void increment() { c++; } public void decrement() { c--; } public int value() { return c; } }
使Counter
免受線程干擾的一種方法是使其方法同步,如在SynchronizedCounter中:c++
class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c--; } public synchronized int value() { return c; } }
對於這個簡單的類,同步是可接受的解決方案,可是對於更復雜的類,咱們可能但願避免沒必要要的同步對活性的影響,用AtomicInteger
替換int
字段容許咱們在不使用同步的狀況下防止線程干擾,如在AtomicCounter中:git
import java.util.concurrent.atomic.AtomicInteger; class AtomicCounter { private AtomicInteger c = new AtomicInteger(0); public void increment() { c.incrementAndGet(); } public void decrement() { c.decrementAndGet(); } public int value() { return c.get(); } }