Package io.netty.util.internal
Class ThreadLocalRandom
java.lang.Object
java.util.Random
io.netty.util.internal.ThreadLocalRandom
- All Implemented Interfaces:
Serializable
,java.util.random.RandomGenerator
A random number generator isolated to the current thread. Like the
global
) use random numbers
in parallel in thread pools.
Random
generator used by the Math
class, a ThreadLocalRandom
is initialized
with an internally generated seed that may not otherwise be
modified. When applicable, use of ThreadLocalRandom
rather
than shared Random
objects in concurrent programs will
typically encounter much less overhead and contention. Use of
ThreadLocalRandom
is particularly appropriate when multiple
tasks (for example, each a
invalid reference
io.netty.util.internal.chmv8.ForkJoinTask
Usages of this class should typically be of the form:
ThreadLocalRandom.current().nextX(...)
(where
X
is Int
, Long
, etc).
When all usages are of this form, it is never possible to
accidentally share a ThreadLocalRandom
across multiple threads.
This class also provides additional commonly used bounded random generation methods. //since 1.7 //author Doug Lea
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface java.util.random.RandomGenerator
java.util.random.RandomGenerator.ArbitrarilyJumpableGenerator, java.util.random.RandomGenerator.JumpableGenerator, java.util.random.RandomGenerator.LeapableGenerator, java.util.random.RandomGenerator.SplittableGenerator, java.util.random.RandomGenerator.StreamableGenerator
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final long
(package private) boolean
Initialization flag to permit calls to setSeed to succeed only while executing the Random constructor.private static long
private static final InternalLogger
private static final long
private static final long
private long
private long
private long
private long
private long
private long
private long
private long
private long
The random seed.private static long
private static final long
private static final Thread
private static final BlockingQueue
<Long> private static final AtomicLong
private static final long
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic ThreadLocalRandom
current()
Returns the current thread'sThreadLocalRandom
.static long
private static long
mix64
(long z) private static long
newSeed()
protected int
next
(int bits) double
nextDouble
(double n) Returns a pseudorandom, uniformly distributeddouble
value between 0 (inclusive) and the specified value (exclusive).double
nextDouble
(double least, double bound) Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).int
nextInt
(int least, int bound) Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).long
nextLong
(long n) Returns a pseudorandom, uniformly distributed value between 0 (inclusive) and the specified value (exclusive).long
nextLong
(long least, long bound) Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).static void
setInitialSeedUniquifier
(long initialSeedUniquifier) void
setSeed
(long seed) ThrowsUnsupportedOperationException
.Methods inherited from class java.util.Random
doubles, doubles, doubles, doubles, from, ints, ints, ints, ints, longs, longs, longs, longs, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.util.random.RandomGenerator
isDeprecated, nextExponential, nextFloat, nextFloat, nextGaussian
-
Field Details
-
logger
-
seedUniquifier
-
initialSeedUniquifier
private static volatile long initialSeedUniquifier -
seedGeneratorThread
-
seedQueue
-
seedGeneratorStartTime
private static final long seedGeneratorStartTime -
seedGeneratorEndTime
private static volatile long seedGeneratorEndTime -
multiplier
private static final long multiplier- See Also:
-
addend
private static final long addend- See Also:
-
mask
private static final long mask- See Also:
-
rnd
private long rndThe random seed. We can't use super.seed. -
initialized
boolean initializedInitialization flag to permit calls to setSeed to succeed only while executing the Random constructor. We can't allow others since it would cause setting seed in one part of a program to unintentionally impact other usages by the thread. -
pad0
private long pad0 -
pad1
private long pad1 -
pad2
private long pad2 -
pad3
private long pad3 -
pad4
private long pad4 -
pad5
private long pad5 -
pad6
private long pad6 -
pad7
private long pad7 -
serialVersionUID
private static final long serialVersionUID- See Also:
-
-
Constructor Details
-
ThreadLocalRandom
ThreadLocalRandom()Constructor called only by localRandom.initialValue.
-
-
Method Details
-
setInitialSeedUniquifier
public static void setInitialSeedUniquifier(long initialSeedUniquifier) -
getInitialSeedUniquifier
public static long getInitialSeedUniquifier() -
newSeed
private static long newSeed() -
mix64
private static long mix64(long z) -
current
Returns the current thread'sThreadLocalRandom
.- Returns:
- the current thread's
ThreadLocalRandom
-
setSeed
public void setSeed(long seed) ThrowsUnsupportedOperationException
. Setting seeds in this generator is not supported.- Overrides:
setSeed
in classRandom
- Throws:
UnsupportedOperationException
- always
-
next
protected int next(int bits) -
nextInt
public int nextInt(int least, int bound) Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).- Parameters:
least
- the least value returnedbound
- the upper bound (exclusive)- Returns:
- the next value
- Throws:
IllegalArgumentException
- if least greater than or equal to bound
-
nextLong
public long nextLong(long n) Returns a pseudorandom, uniformly distributed value between 0 (inclusive) and the specified value (exclusive).- Parameters:
n
- the bound on the random number to be returned. Must be positive.- Returns:
- the next value
- Throws:
IllegalArgumentException
- if n is not positive
-
nextLong
public long nextLong(long least, long bound) Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).- Parameters:
least
- the least value returnedbound
- the upper bound (exclusive)- Returns:
- the next value
- Throws:
IllegalArgumentException
- if least greater than or equal to bound
-
nextDouble
public double nextDouble(double n) Returns a pseudorandom, uniformly distributeddouble
value between 0 (inclusive) and the specified value (exclusive).- Parameters:
n
- the bound on the random number to be returned. Must be positive.- Returns:
- the next value
- Throws:
IllegalArgumentException
- if n is not positive
-
nextDouble
public double nextDouble(double least, double bound) Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).- Parameters:
least
- the least value returnedbound
- the upper bound (exclusive)- Returns:
- the next value
- Throws:
IllegalArgumentException
- if least greater than or equal to bound
-