# Class ThreadLocalRandom

java.lang.Object
java.util.Random
org.apache.jmeter.util.ThreadLocalRandom

All Implemented Interfaces:
  `Serializable, RandomGenerator`

public class ThreadLocalRandom extends Random
A random number generator 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 java.util.concurrent.ForkJoinTask (JDK 1.7)) 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 accidently share a `ThreadLocalRandom` across multiple threads.

This class also provides additional commonly used bounded random generation methods.

Since:
  2.12
Author:
  Doug Lea TODO Remove when minimum Java Version become Java 7
See Also:
  - Serialized Form

## Nested Class Summary

### Nested classes/interfaces inherited from interface RandomGenerator

`RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator`

## Method Summary

Modifier and Type
Method
Description
`static ThreadLocalRandom`
`current()`
Returns the current thread's `ThreadLocalRandom`.
`protected int`
`next(int bits)`
`double`
`nextDouble(double n)`
Returns a pseudorandom, uniformly distributed `double` value between 0 (inclusive) and the specified value (exclusive).
`double`
`nextDouble(double least, double bound)`
Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).
`int`
`nextInt(int least, int bound)`
Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).
`long`
`nextLong(long n)`
Returns a pseudorandom, uniformly distributed value between 0 (inclusive) and the specified value (exclusive).
`long`
`nextLong(long least, long bound)`
Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).
`void`
`setSeed(long seed)`
Throws `UnsupportedOperationException`.

### Methods inherited from class Random

`doubles, doubles, doubles, doubles, from, ints, ints, ints, ints, longs, longs, longs, longs, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface RandomGenerator

`equiDoubles, isDeprecated, nextExponential, nextFloat, nextFloat, nextGaussian`

## Method Details

### current

public static ThreadLocalRandom current()
Returns the current thread's `ThreadLocalRandom`.

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`
Throws:
  `UnsupportedOperationException` - always

### next

protected int next(int bits)

Overrides:
  `next` in class `Random`

### nextInt

public int nextInt(int least, int bound)
Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).

Parameters:
  `least` - the least value returned
  `bound` - the upper bound (exclusive)
Returns:
  the next value
Throws:
  `IllegalArgumentException` - if least greater than or equal to bound

### nextLong

public long nextLong(long n)
Returns a pseudorandom, uniformly distributed value between 0 (inclusive) and the specified value (exclusive).

Parameters:
  `n` - the bound on the random number to be returned. Must be positive.
Returns:
  the next value
Throws:
  `IllegalArgumentException` - if n is not positive

### nextLong

public long nextLong(long least, long bound)
Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).

Parameters:
  `least` - the least value returned
  `bound` - the upper bound (exclusive)
Returns:
  the next value
Throws:
  `IllegalArgumentException` - if least greater than or equal to bound

### nextDouble

public double nextDouble(double n)
Returns a pseudorandom, uniformly distributed `double` value between 0 (inclusive) and the specified value (exclusive).

Parameters:
  `n` - the bound on the random number to be returned. Must be positive.
Returns:
  the next value
Throws:
  `IllegalArgumentException` - if n is not positive

### nextDouble

public double nextDouble(double least, double bound)
Returns a pseudorandom, uniformly distributed value between the given least value (inclusive) and bound (exclusive).

Parameters:
  `least` - the least value returned
  `bound` - the upper bound (exclusive)
Returns:
  the next value
Throws:
  `IllegalArgumentException` - if least greater than or equal to bound