Module java.base

Class ThreadLocalRandom

All Implemented Interfaces:
Serializable, RandomGenerator

                                                        public class ThreadLocalRandom
extends Random
                        
                        
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
See Also:
Serialized Form
  • Method Details

    • current

      public static  ThreadLocalRandom current()
      Returns the current thread's ThreadLocalRandom 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)
      Throws UnsupportedOperationException. Setting seeds in this generator is not supported.
      Overrides:
      setSeed in class Random
      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.
      Overrides:
      next in class Random
      Parameters:
      bits - random bits
      Returns:
      the next pseudorandom value from this random number generator's sequence

    • proxy

      public static  RandomGenerator proxy()
      Returns a RandomGenerator object that uses ThreadLocalRandom. This object is threadsafe (methods of this object may be called by threads other than the current one).
      Returns:
      a RandomGenerator object that uses ThreadLocalRandom