Serializable, RandomGenerator
public final 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.
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
| Modifier and Type | Method | Description | 
|---|---|---|
| static ThreadLocalRandom | current() | Returns the current thread's  ThreadLocalRandomobject. | 
| DoubleStream | doubles() | Returns an effectively unlimited stream of pseudorandom  
 doublevalues, each between zero (inclusive) and one (exclusive). | 
| DoubleStream | doubles | Returns an effectively unlimited stream of pseudorandom  
 doublevalues, each conforming to the given origin (inclusive) and bound (exclusive). | 
| DoubleStream | doubles | Returns a stream producing the given  streamSizenumber of pseudorandomdoublevalues, each between zero (inclusive) and one (exclusive). | 
| DoubleStream | doubles | Returns a stream producing the given  streamSizenumber of pseudorandomdoublevalues, each conforming to the given origin (inclusive) and bound (exclusive). | 
| IntStream | ints() | Returns an effectively unlimited stream of pseudorandom  intvalues. | 
| IntStream | ints | Returns an effectively unlimited stream of pseudorandom  
 intvalues, each conforming to the given origin (inclusive) and bound (exclusive). | 
| IntStream | ints | Returns a stream producing the given  streamSizenumber of pseudorandomintvalues. | 
| IntStream | ints | Returns a stream producing the given  streamSizenumber of pseudorandomintvalues, each conforming to the given origin (inclusive) and bound (exclusive). | 
| LongStream | longs() | Returns an effectively unlimited stream of pseudorandom  longvalues. | 
| LongStream | longs | Returns a stream producing the given  streamSizenumber of pseudorandomlongvalues. | 
| LongStream | longs | Returns an effectively unlimited stream of pseudorandom  
 longvalues, each conforming to the given origin (inclusive) and bound (exclusive). | 
| LongStream | longs | Returns a stream producing the given  streamSizenumber of pseudorandomlong, each conforming to the given origin (inclusive) and bound (exclusive). | 
| protected int | next | Generates a pseudorandom number with the indicated number of low-order bits. | 
| double | nextDouble | Returns a pseudorandomly chosen  doublevalue between zero (inclusive) and the specified bound (exclusive). | 
| double | nextDouble | Returns a pseudorandomly chosen  doublevalue between the specified origin (inclusive) and the specified bound (exclusive). | 
| float | nextFloat | Returns a pseudorandomly chosen  floatvalue between zero (inclusive) and the specified bound (exclusive). | 
| float | nextFloat | Returns a pseudorandomly chosen  floatvalue between the specified origin (inclusive) and the specified bound (exclusive). | 
| int | nextInt | Returns a pseudorandom, uniformly distributed  intvalue between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence. | 
| int | nextInt | Returns a pseudorandomly chosen  intvalue between the specified origin (inclusive) and the specified bound (exclusive). | 
| long | nextLong | Returns a pseudorandomly chosen  longvalue between zero (inclusive) and the specified bound (exclusive). | 
| long | nextLong | Returns a pseudorandomly chosen  longvalue between the specified origin (inclusive) and the specified bound (exclusive). | 
| void | setSeed | Throws  UnsupportedOperationException. | 
from, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextLong
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
isDeprecated, nextExponential, nextGaussian
public static ThreadLocalRandom current()
ThreadLocalRandom object. Methods of this object should be called only by the current thread, not by other threads.ThreadLocalRandom
public void setSeed(long seed)
UnsupportedOperationException. Setting seeds in this generator is not supported.setSeed in class Random
seed - the seed valueUnsupportedOperationException - alwaysprotected int next(int bits)
public int nextInt(int bound)
int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence. The general contract of nextInt is that one int value in the specified range is pseudorandomly generated and returned. All bound possible int values are produced with (approximately) equal probability.nextInt in interface RandomGenerator
nextInt in class Random
bound - the upper bound (exclusive). Must be positive.int value between zero (inclusive) and bound (exclusive) from this random number generator's sequenceIllegalArgumentException - if bound is not positivepublic int nextInt(int origin, int bound)
int value between the specified origin (inclusive) and the specified bound (exclusive).origin - the least value that can be returnedbound - the upper bound (exclusive) for the returned valueint value between the origin (inclusive) and the bound (exclusive)IllegalArgumentException - if origin is greater than or equal to bound
public long nextLong(long bound)
long value between zero (inclusive) and the specified bound (exclusive).bound - the upper bound (exclusive) for the returned value. Must be positive.long value between zero (inclusive) and the bound (exclusive)IllegalArgumentException - if bound is not positivepublic long nextLong(long origin, long bound)
long value between the specified origin (inclusive) and the specified bound (exclusive).origin - the least value that can be returnedbound - the upper bound (exclusive) for the returned valuelong value between the origin (inclusive) and the bound (exclusive)IllegalArgumentException - if origin is greater than or equal to bound
public float nextFloat(float bound)
float value between zero (inclusive) and the specified bound (exclusive).bound - the upper bound (exclusive) for the returned value. Must be positive and finitefloat value between zero (inclusive) and the bound (exclusive)IllegalArgumentException - if bound is not both positive and finitepublic float nextFloat(float origin, float bound)
float value between the specified origin (inclusive) and the specified bound (exclusive).origin - the least value that can be returnedbound - the upper bound (exclusive)float value between the origin (inclusive) and the bound (exclusive)IllegalArgumentException - if origin is not finite, or bound is not finite, or origin is greater than or equal to bound
public double nextDouble(double bound)
double value between zero (inclusive) and the specified bound (exclusive).bound - the upper bound (exclusive) for the returned value. Must be positive and finitedouble value between zero (inclusive) and the bound (exclusive)IllegalArgumentException - if bound is not both positive and finitepublic double nextDouble(double origin, double bound)
double value between the specified origin (inclusive) and the specified bound (exclusive).origin - the least value that can be returnedbound - the upper bound (exclusive) for the returned valuedouble value between the origin (inclusive) and the bound (exclusive)IllegalArgumentException - if origin is not finite, or bound is not finite, or origin is greater than or equal to bound
public IntStream ints(long streamSize)
streamSize number of pseudorandom int values. A pseudorandom int value is generated as if it's the result of calling the method Random.nextInt().
ints in interface RandomGenerator
ints in class Random
streamSize - the number of values to generateint valuesIllegalArgumentException - if streamSize is less than zeropublic IntStream ints()
int values. A pseudorandom int value is generated as if it's the result of calling the method Random.nextInt().
ints in interface RandomGenerator
ints in class Random
ints(Long.MAX_VALUE).int valuespublic IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
streamSize number of pseudorandom int values, each conforming to the given origin (inclusive) and bound (exclusive). A pseudorandom int value is generated as if it's the result of calling the following method with the origin and bound: 
 
 int nextInt(int origin, int bound) {
   int n = bound - origin;
   if (n > 0) {
     return nextInt(n) + origin;
   }
   else {  // range not representable as int
     int r;
     do {
       r = nextInt();
     } while (r < origin || r >= bound);
     return r;
   }
 }
ints in interface RandomGenerator
ints in class Random
streamSize - the number of values to generaterandomNumberOrigin - the origin (inclusive) of each random valuerandomNumberBound - the bound (exclusive) of each random valueint values, each with the given origin (inclusive) and bound (exclusive)IllegalArgumentException - if streamSize is less than zero, or randomNumberOrigin is greater than or equal to randomNumberBound
public IntStream ints(int randomNumberOrigin, int randomNumberBound)
 int values, each conforming to the given origin (inclusive) and bound (exclusive). A pseudorandom int value is generated as if it's the result of calling the following method with the origin and bound: 
 
 int nextInt(int origin, int bound) {
   int n = bound - origin;
   if (n > 0) {
     return nextInt(n) + origin;
   }
   else {  // range not representable as int
     int r;
     do {
       r = nextInt();
     } while (r < origin || r >= bound);
     return r;
   }
 }
ints in interface RandomGenerator
ints in class Random
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).randomNumberOrigin - the origin (inclusive) of each random valuerandomNumberBound - the bound (exclusive) of each random valueint values, each with the given origin (inclusive) and bound (exclusive)IllegalArgumentException - if randomNumberOrigin is greater than or equal to randomNumberBound
public LongStream longs(long streamSize)
streamSize number of pseudorandom long values. A pseudorandom long value is generated as if it's the result of calling the method Random.nextLong().
longs in interface RandomGenerator
longs in class Random
streamSize - the number of values to generatelong valuesIllegalArgumentException - if streamSize is less than zeropublic LongStream longs()
long values. A pseudorandom long value is generated as if it's the result of calling the method Random.nextLong().
longs in interface RandomGenerator
longs in class Random
longs(Long.MAX_VALUE).long valuespublic LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
streamSize number of pseudorandom long, each conforming to the given origin (inclusive) and bound (exclusive). A pseudorandom long value is generated as if it's the result of calling the following method with the origin and bound: 
 
 long nextLong(long origin, long bound) {
   long r = nextLong();
   long n = bound - origin, m = n - 1;
   if ((n & m) == 0L)  // power of two
     r = (r & m) + origin;
   else if (n > 0L) {  // reject over-represented candidates
     for (long u = r >>> 1;            // ensure nonnegative
          u + m - (r = u % n) < 0L;    // rejection check
          u = nextLong() >>> 1) // retry
         ;
     r += origin;
   }
   else {              // range not representable as long
     while (r < origin || r >= bound)
       r = nextLong();
   }
   return r;
 }
longs in interface RandomGenerator
longs in class Random
streamSize - the number of values to generaterandomNumberOrigin - the origin (inclusive) of each random valuerandomNumberBound - the bound (exclusive) of each random valuelong values, each with the given origin (inclusive) and bound (exclusive)IllegalArgumentException - if streamSize is less than zero, or randomNumberOrigin is greater than or equal to randomNumberBound
public LongStream longs(long randomNumberOrigin, long randomNumberBound)
 long values, each conforming to the given origin (inclusive) and bound (exclusive). A pseudorandom long value is generated as if it's the result of calling the following method with the origin and bound: 
 
 long nextLong(long origin, long bound) {
   long r = nextLong();
   long n = bound - origin, m = n - 1;
   if ((n & m) == 0L)  // power of two
     r = (r & m) + origin;
   else if (n > 0L) {  // reject over-represented candidates
     for (long u = r >>> 1;            // ensure nonnegative
          u + m - (r = u % n) < 0L;    // rejection check
          u = nextLong() >>> 1) // retry
         ;
     r += origin;
   }
   else {              // range not representable as long
     while (r < origin || r >= bound)
       r = nextLong();
   }
   return r;
 }
longs in interface RandomGenerator
longs in class Random
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).randomNumberOrigin - the origin (inclusive) of each random valuerandomNumberBound - the bound (exclusive) of each random valuelong values, each with the given origin (inclusive) and bound (exclusive)IllegalArgumentException - if randomNumberOrigin is greater than or equal to randomNumberBound
public DoubleStream doubles(long streamSize)
streamSize number of pseudorandom double values, each between zero (inclusive) and one (exclusive). A pseudorandom double value is generated as if it's the result of calling the method Random.nextDouble().
doubles in interface RandomGenerator
doubles in class Random
streamSize - the number of values to generatedouble valuesIllegalArgumentException - if streamSize is less than zeropublic DoubleStream doubles()
 double values, each between zero (inclusive) and one (exclusive). A pseudorandom double value is generated as if it's the result of calling the method Random.nextDouble().
doubles in interface RandomGenerator
doubles in class Random
doubles(Long.MAX_VALUE).double valuespublic DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
streamSize number of pseudorandom double values, each conforming to the given origin (inclusive) and bound (exclusive).doubles in interface RandomGenerator
doubles in class Random
streamSize - the number of values to generaterandomNumberOrigin - the origin (inclusive) of each random valuerandomNumberBound - the bound (exclusive) of each random valuedouble values, each with the given origin (inclusive) and bound (exclusive)IllegalArgumentException - if streamSize is less than zero, or randomNumberOrigin is not finite, or randomNumberBound is not finite, or randomNumberOrigin is greater than or equal to randomNumberBound
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
 double values, each conforming to the given origin (inclusive) and bound (exclusive).doubles in interface RandomGenerator
doubles in class Random
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).randomNumberOrigin - the origin (inclusive) of each random valuerandomNumberBound - the bound (exclusive) of each random valuedouble values, each with the given origin (inclusive) and bound (exclusive)IllegalArgumentException - if randomNumberOrigin is not finite, or randomNumberBound is not finite, or randomNumberOrigin is greater than or equal to randomNumberBound
    © 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
    https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/ThreadLocalRandom.html