有两个主要用途
AtomicInteger:
作为
incrementAndGet()可以同时被多个线程使用的原子计数器(,等)
作为支持比较和交换指令(
compareAndSet())来实现非阻塞算法的原语。
这是BrianGöetz的
Java Concurrency In Practice中的非阻塞随机数生成器的示例:
public class AtomicPseudoRandom extends PseudoRandom { private AtomicInteger seed; AtomicPseudoRandom(int seed) { this.seed = new AtomicInteger(seed); } public int nextInt(int n) { while (true) { int s = seed.get(); int nextSeed = calculateNext(s); if (seed.compareAndSet(s, nextSeed)) { int remainder = s % n; return remainder > 0 ? remainder : remainder + n; } } } ...}如你所见,它的工作原理与几乎相同incrementAndGet(),但是执行任意计算(calculateNext())而不是增量(并在返回之前处理结果)。



