Package io.netty.util.internal
Class ThreadLocalRandom
- java.lang.Object
-
- java.util.Random
-
- io.netty.util.internal.ThreadLocalRandom
-
- All Implemented Interfaces:
java.io.Serializable
public final class ThreadLocalRandom extends java.util.RandomA random number generator isolated to the current thread. Like the globalRandomgenerator used by theMathclass, aThreadLocalRandomis initialized with an internally generated seed that may not otherwise be modified. When applicable, use ofThreadLocalRandomrather than sharedRandomobjects in concurrent programs will typically encounter much less overhead and contention. Use ofThreadLocalRandomis particularly appropriate when multiple tasks (for example, each aio.netty.util.internal.chmv8.ForkJoinTask) use random numbers in parallel in thread pools.Usages of this class should typically be of the form:
ThreadLocalRandom.current().nextX(...)(whereXisInt,Long, etc). When all usages are of this form, it is never possible to accidently share aThreadLocalRandomacross multiple threads.This class also provides additional commonly used bounded random generation methods. //since 1.7 //author Doug Lea
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private static longaddend(package private) booleaninitializedInitialization flag to permit calls to setSeed to succeed only while executing the Random constructor.private static longinitialSeedUniquifierprivate static InternalLoggerloggerprivate static longmaskprivate static longmultiplierprivate longpad0private longpad1private longpad2private longpad3private longpad4private longpad5private longpad6private longpad7private longrndThe random seed.private static longseedGeneratorEndTimeprivate static longseedGeneratorStartTimeprivate static java.lang.ThreadseedGeneratorThreadprivate static java.util.concurrent.BlockingQueue<java.lang.Long>seedQueueprivate static java.util.concurrent.atomic.AtomicLongseedUniquifierprivate static longserialVersionUID
-
Constructor Summary
Constructors Constructor Description ThreadLocalRandom()Constructor called only by localRandom.initialValue.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static ThreadLocalRandomcurrent()Returns the current thread'sThreadLocalRandom.static longgetInitialSeedUniquifier()private static longmix64(long z)private static longnewSeed()protected intnext(int bits)doublenextDouble(double n)Returns a pseudorandom, uniformly distributeddoublevalue between 0 (inclusive) and the specified value (exclusive).doublenextDouble(double least, double bound)Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).intnextInt(int least, int bound)Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).longnextLong(long n)Returns a pseudorandom, uniformly distributed value between 0 (inclusive) and the specified value (exclusive).longnextLong(long least, long bound)Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).static voidsetInitialSeedUniquifier(long initialSeedUniquifier)voidsetSeed(long seed)ThrowsUnsupportedOperationException.
-
-
-
Field Detail
-
logger
private static final InternalLogger logger
-
seedUniquifier
private static final java.util.concurrent.atomic.AtomicLong seedUniquifier
-
initialSeedUniquifier
private static volatile long initialSeedUniquifier
-
seedGeneratorThread
private static final java.lang.Thread seedGeneratorThread
-
seedQueue
private static final java.util.concurrent.BlockingQueue<java.lang.Long> seedQueue
-
seedGeneratorStartTime
private static final long seedGeneratorStartTime
-
seedGeneratorEndTime
private static volatile long seedGeneratorEndTime
-
multiplier
private static final long multiplier
- See Also:
- Constant Field Values
-
addend
private static final long addend
- See Also:
- Constant Field Values
-
mask
private static final long mask
- See Also:
- Constant Field Values
-
rnd
private long rnd
The random seed. We can't use super.seed.
-
initialized
boolean initialized
Initialization 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:
- Constant Field Values
-
-
Method Detail
-
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
public static ThreadLocalRandom 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:
setSeedin classjava.util.Random- Throws:
java.lang.UnsupportedOperationException- always
-
next
protected int next(int bits)
- Overrides:
nextin classjava.util.Random
-
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:
java.lang.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:
java.lang.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:
java.lang.IllegalArgumentException- if least greater than or equal to bound
-
nextDouble
public double nextDouble(double n)
Returns a pseudorandom, uniformly distributeddoublevalue 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:
java.lang.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:
java.lang.IllegalArgumentException- if least greater than or equal to bound
-
-