package net.jcip.examples; import java.util.concurrent.atomic.*; import net.jcip.annotations.*; /** * AtomicPseudoRandom *
* Random number generator using AtomicInteger * * @author Brian Goetz and Tim Peierls */ @ThreadSafe 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; } } } }