- All Implemented Interfaces:
-
Serializable
,RandomGenerator
public class ThreadLocalRandom extends Random
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
- See Also:
- Serialized Form
-
Nested Class Summary
Nested classes/interfaces declared in interface java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.RandomGeneratorProperty, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
-
Field Summary
Fields declared in interface java.util.random.RandomGenerator
HUGE_PERIOD, TRULY_RANDOM, UNKNOWN_PERIOD
-
Method Summary
Modifier and TypeMethodDescriptionstatic ThreadLocalRandom
current()
Returns the current thread'sThreadLocalRandom
object.protected int
next(int bits)
Generates a pseudorandom number with the indicated number of low-order bits.static RandomGenerator
proxy()
Returns aRandomGenerator
object that usesThreadLocalRandom
.void
setSeed(long seed)
ThrowsUnsupportedOperationException
.Methods declared in class java.util.Random
nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong
Methods declared in class jdk.internal.util.random.RandomSupport.AbstractSpliteratorGenerator
doubles, doubles, doubles, doubles, ints, ints, ints, ints, longs, longs, longs, longs, makeDoublesSpliterator, makeIntsSpliterator, makeLongsSpliterator
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
nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong, nextLong
-
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
- Parameters:
-
seed
- the initial seed - 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. -
proxy
Returns aRandomGenerator
object that usesThreadLocalRandom
. This object is threadsafe (methods of this object may be called by threads other than the current one).- Returns:
-
a
RandomGenerator
object that usesThreadLocalRandom
-