Class ThreadLocalRandom
java.lang.Object
java.util.Random
org.jboss.netty.util.internal.ThreadLocalRandom
- All Implemented Interfaces:
Serializable
A random number generator isolated to the current thread. Like the
global
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 use random numbers in parallel in thread pools.
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
accidently share a ThreadLocalRandom across multiple threads.
This class also provides additional commonly used bounded random generation methods.
- Since:
- 1.7
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final longprivate booleanInitialization flag to permit the first and only allowed call to setSeed (inside Random constructor) to succeed.private static final ThreadLocal<ThreadLocalRandom> The actual ThreadLocalprivate static final longprivate static final longprivate longprivate longprivate longprivate longprivate longprivate longprivate longprivate longprivate longThe random seed.private static final long -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic ThreadLocalRandomcurrent()Returns the current thread'sThreadLocalRandom.protected intnext(int bits) voidsetSeed(long seed) ThrowsUnsupportedOperationException.
-
Field Details
-
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
private boolean initializedInitialization flag to permit the first and only allowed call to setSeed (inside Random constructor) to succeed. 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 -
localRandom
The actual ThreadLocal -
serialVersionUID
private static final long serialVersionUID- See Also:
-
-
Constructor Details
-
ThreadLocalRandom
public ThreadLocalRandom()
-
-
Method Details
-
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 classRandom- Throws:
UnsupportedOperationException- always
-
next
-