Java Reference
In-Depth Information
However, it is often convenient to drop the “pseudo” prefix and refer to them as ran-
dom numbers.
Random
generatesitssequenceofrandomnumbersbystartingwithaspecial48-bit
value that is known as a
seed
. This value is subsequently modified by a mathematical
algorithm, which is known as a
linear congruential generator
.
Note
Check out Wikipedia's “Linear congruential generator” entry (
ht-
to learn about this algorithm for generating random numbers.
Random
declares a pair of constructors:
•
Random()
createsanewrandomnumbergenerator.Thisconstructorsetsthe
seedoftherandomnumbergeneratortoavaluethatisverylikelytobedistinct
from any other call to this constructor.
•
Random(long seed)
creates a new random number generator using its
seed
argument.Thisargumentistheinitialvalueoftherandomnumbergener-
ator'sinternalstate,whichthe
protected int next(int bits)
meth-
od maintains.
Note
The
next()
method,whichisusedbytheothermethods,is
protected
so
that subclasses can change the generator implementation from that shown below
protected int next(int bits) {
long oldseed, nextseed;
AtomicLong seed = this.seed;
do {
oldseed = seed.get();
nextseed = (oldseed*multiplier+addend)&mask;
} while (!seed.compareAndSet(oldseed, nextseed));
return (int) (nextseed >>> (48-bits));
}
to something different. For a subclassing example, check out “Subclassing
java.util.Random” (
http://www.javamex.com/tutorials/ran-
Because
Random()
does not take a
seed
argument, the resulting random number
generatoralwaysgeneratesadifferentsequenceofrandomnumbers.Thisexplainswhy