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 ThreadLocalRandomcurrent()Returns the current thread'sThreadLocalRandomobject.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 intnext(int bits) Generates a pseudorandom number with the indicated number of low-order bits.doublenextDouble(double bound) doublenextDouble(double origin, double bound) floatnextFloat(float bound) floatnextFloat(float origin, float bound) intnextInt(int bound) intnextInt(int origin, int bound) longnextLong(long bound) longnextLong(long origin, long bound) voidsetSeed(long seed) ThrowsUnsupportedOperationException.Methods declared in class java.util.Random
nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextLongMethods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods declared in interface java.util.random.RandomGenerator
isDeprecated, nextExponential, nextGaussian
-
Method Details
-
current
Returns the current thread'sThreadLocalRandomobject. 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:
setSeedin 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:
nextIntin interfaceRandomGenerator- Overrides:
nextIntin 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:
intsin interfaceRandomGenerator- Overrides:
intsin classRandom- Throws:
IllegalArgumentException- Since:
- 1.8
-
ints
- Specified by:
intsin interfaceRandomGenerator- Overrides:
intsin classRandom- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
ints(Long.MAX_VALUE).
-
ints
- Specified by:
intsin interfaceRandomGenerator- Overrides:
intsin classRandom- Throws:
IllegalArgumentException- Since:
- 1.8
-
ints
- Specified by:
intsin interfaceRandomGenerator- Overrides:
intsin 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:
longsin interfaceRandomGenerator- Overrides:
longsin classRandom- Throws:
IllegalArgumentException- Since:
- 1.8
-
longs
- Specified by:
longsin interfaceRandomGenerator- Overrides:
longsin classRandom- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
longs(Long.MAX_VALUE).
-
longs
- Specified by:
longsin interfaceRandomGenerator- Overrides:
longsin classRandom- Throws:
IllegalArgumentException- Since:
- 1.8
-
longs
- Specified by:
longsin interfaceRandomGenerator- Overrides:
longsin 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:
doublesin interfaceRandomGenerator- Overrides:
doublesin classRandom- Throws:
IllegalArgumentException- Since:
- 1.8
-
doubles
- Specified by:
doublesin interfaceRandomGenerator- Overrides:
doublesin classRandom- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
doubles(Long.MAX_VALUE).
-
doubles
- Specified by:
doublesin interfaceRandomGenerator- Overrides:
doublesin classRandom- Throws:
IllegalArgumentException- Since:
- 1.8
-
doubles
- Specified by:
doublesin interfaceRandomGenerator- Overrides:
doublesin classRandom- Throws:
IllegalArgumentException- Since:
- 1.8
- Implementation Note:
- This method is implemented to be equivalent to
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).
-