java.lang.Object
java.util.Random
java.util.concurrent.ThreadLocalRandom
- All Implemented Interfaces:
Serializable
,RandomGenerator
A random number generator (with period 264) 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 (for example, each a ForkJoinTask
) 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
accidentally share a ThreadLocalRandom
across multiple threads.
This class also provides additional commonly used bounded random generation methods.
Instances of ThreadLocalRandom
are not cryptographically
secure. Consider instead using SecureRandom
in security-sensitive applications. Additionally,
default-constructed instances do not use a cryptographically random
seed unless the system property
java.util.secureRandomSeed
is set to true
.
- Since:
- 1.7
- Author:
- Doug Lea
- See Also:
-
Nested Class Summary
Nested classes/interfaces declared in interface java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
-
Method Summary
Modifier and TypeMethodDescriptionstatic ThreadLocalRandom
current()
Returns the current thread'sThreadLocalRandom
object.doubles()
doubles
(double randomNumberOrigin, double randomNumberBound) doubles
(long streamSize) doubles
(long streamSize, double randomNumberOrigin, double randomNumberBound) ints()
ints
(int randomNumberOrigin, int randomNumberBound) ints
(long streamSize) ints
(long streamSize, int randomNumberOrigin, int randomNumberBound) longs()
longs
(long streamSize) longs
(long randomNumberOrigin, long randomNumberBound) longs
(long streamSize, long randomNumberOrigin, long randomNumberBound) protected int
next
(int bits) Generates a pseudorandom number with the indicated number of low-order bits.double
nextDouble
(double bound) double
nextDouble
(double origin, double bound) float
nextFloat
(float bound) float
nextFloat
(float origin, float bound) int
nextInt
(int bound) int
nextInt
(int origin, int bound) long
nextLong
(long bound) long
nextLong
(long origin, long bound) void
setSeed
(long seed) ThrowsUnsupportedOperationException
.Methods declared in class java.util.Random
nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextLong
Methods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods declared in interface java.util.random.RandomGenerator
isDeprecated, nextExponential, nextGaussian
-
Method Details
-
current
Returns the current thread'sThreadLocalRandom
object. Methods of this object should be called only by the current thread, not by other threads.- 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) Generates a pseudorandom number with the indicated number of low-order bits. Because this class has no subclasses, this method cannot be invoked or overridden. -
nextInt
public int nextInt(int bound) - Specified by:
nextInt
in interfaceRandomGenerator
- Overrides:
nextInt
in classRandom
- Throws:
IllegalArgumentException
-
nextInt
public int nextInt(int origin, int bound) - Throws:
IllegalArgumentException
-
nextLong
public long nextLong(long bound) - Throws:
IllegalArgumentException
-
nextLong
public long nextLong(long origin, long bound) - Throws:
IllegalArgumentException
-
nextFloat
public float nextFloat(float bound) - Throws:
IllegalArgumentException
- Implementation Note:
-
nextFloat
public float nextFloat(float origin, float bound) - Throws:
IllegalArgumentException
- Implementation Note:
-
nextDouble
public double nextDouble(double bound) - Throws:
IllegalArgumentException
- Implementation Note:
-
nextDouble
public double nextDouble(double origin, double bound) - Throws:
IllegalArgumentException
- Implementation Note:
-
ints
- Specified by:
ints
in interfaceRandomGenerator
- Overrides:
ints
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
-
ints
- Specified by:
ints
in interfaceRandomGenerator
- Overrides:
ints
in classRandom
- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
ints(Long.MAX_VALUE)
.
-
ints
- Specified by:
ints
in interfaceRandomGenerator
- Overrides:
ints
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
-
ints
- Specified by:
ints
in interfaceRandomGenerator
- Overrides:
ints
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
.
-
longs
- Specified by:
longs
in interfaceRandomGenerator
- Overrides:
longs
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
-
longs
- Specified by:
longs
in interfaceRandomGenerator
- Overrides:
longs
in classRandom
- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
longs(Long.MAX_VALUE)
.
-
longs
- Specified by:
longs
in interfaceRandomGenerator
- Overrides:
longs
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
-
longs
- Specified by:
longs
in interfaceRandomGenerator
- Overrides:
longs
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
.
-
doubles
- Specified by:
doubles
in interfaceRandomGenerator
- Overrides:
doubles
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
-
doubles
- Specified by:
doubles
in interfaceRandomGenerator
- Overrides:
doubles
in classRandom
- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
doubles(Long.MAX_VALUE)
.
-
doubles
- Specified by:
doubles
in interfaceRandomGenerator
- Overrides:
doubles
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
-
doubles
- Specified by:
doubles
in interfaceRandomGenerator
- Overrides:
doubles
in classRandom
- Throws:
IllegalArgumentException
- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
.
-