Java AtomicInteger的实际用途
我有点理解AtomicInteger和其他Atomic变量允许并发访问。但是在什么情况下通常使用此类?
回答:
有两个主要用途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())而不是增量(并在返回之前处理结果)。
以上是 Java AtomicInteger的实际用途 的全部内容, 来源链接: utcz.com/qa/420372.html