Класс ThreadLocalRandom
- Все реализованные интерфейсы:
Serializable, RandomGenerator
public final class ThreadLocalRandom extends Random
Random, используемому классом Math, объект ThreadLocalRandom инициализируется внутренне сгенерированным начальным значением, которое в дальнейшем нельзя изменить. В многопоточных программах использование ThreadLocalRandom вместо общих объектов Random обычно приводит к значительно меньшим накладным расходам и конкуренции за ресурсы. Использование ThreadLocalRandom особенно уместно, когда несколько задач (например, каждая из них — ForkJoinTask) параллельно генерируют случайные числа в пулах потоков. Обычно этот класс используют следующим образом: ThreadLocalRandom.current().nextX(...) (где X — это Int, Long и т. д.). При таком использовании невозможно случайно совместно использовать ThreadLocalRandom в нескольких потоках.
Этот класс также предоставляет дополнительные часто используемые методы генерации случайных чисел в заданном диапазоне.
Экземпляры ThreadLocalRandom не являются криптографически стойкими. В приложениях, критичных с точки зрения безопасности, вместо них следует использовать SecureRandom. Кроме того, экземпляры, созданные конструктором по умолчанию, не используют криптографически случайное начальное значение, если системное свойство java.util.secureRandomSeed не установлено в значение true.
- Начиная с версии:
- 1.7
- См. также:
Краткое описание вложенных классов
Вложенные классы и интерфейсы, объявленные в интерфейсе RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static ThreadLocalRandom |
current() |
Возвращает объект ThreadLocalRandom текущего потока. |
DoubleStream |
doubles() |
Возвращает практически неограниченный поток псевдослучайных значений
double, каждое из которых находится в диапазоне от нуля (включительно) до единицы (не включительно). |
DoubleStream |
doubles |
Возвращает практически неограниченный поток псевдослучайных значений
double, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (не включительно). |
DoubleStream |
doubles |
Возвращает поток из указанного числа streamSize псевдослучайных значений double, каждое из которых находится в диапазоне от нуля (включительно) до единицы (не включительно). |
DoubleStream |
doubles |
Возвращает поток из указанного числа streamSize псевдослучайных значений double, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (не включительно). |
IntStream |
ints() |
Возвращает практически неограниченный поток псевдослучайных значений int. |
IntStream |
ints |
Возвращает практически неограниченный поток псевдослучайных значений
int, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (не включительно). |
IntStream |
ints |
Возвращает поток из указанного числа streamSize псевдослучайных значений int. |
IntStream |
ints |
Возвращает поток из указанного числа streamSize псевдослучайных значений int, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (не включительно). |
LongStream |
longs() |
Возвращает практически неограниченный поток псевдослучайных значений long. |
LongStream |
longs |
Возвращает поток из указанного числа streamSize псевдослучайных значений long. |
LongStream |
longs |
Возвращает практически неограниченный поток псевдослучайных значений
long, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (не включительно). |
LongStream |
longs |
Возвращает поток из указанного числа streamSize псевдослучайных значений long, каждое из которых соответствует заданной нижней границе (включительно) и верхней границе (не включительно). |
protected int |
next |
Генерирует псевдослучайное число с указанным количеством младших битов. |
double |
nextDouble |
Возвращает псевдослучайно выбранное значение double в диапазоне от нуля (включительно) до указанной верхней границы (не включительно). |
double |
nextDouble |
Возвращает псевдослучайно выбранное значение double в диапазоне от указанной нижней границы (включительно) до указанной верхней границы (не включительно). |
float |
nextFloat |
Возвращает псевдослучайно выбранное значение float в диапазоне от нуля (включительно) до указанной верхней границы (не включительно). |
float |
nextFloat |
Возвращает псевдослучайно выбранное значение float в диапазоне от указанной нижней границы (включительно) до указанной верхней границы (не включительно). |
int |
nextInt |
Возвращает псевдослучайное равномерно распределенное значение int в диапазоне от 0 (включительно) до указанного значения (не включительно), выбранное из последовательности этого генератора случайных чисел. |
int |
nextInt |
Возвращает псевдослучайно выбранное значение int в диапазоне от указанной нижней границы (включительно) до указанной верхней границы (не включительно). |
long |
nextLong |
Возвращает псевдослучайно выбранное значение long в диапазоне от нуля (включительно) до указанной верхней границы (не включительно). |
long |
nextLong |
Возвращает псевдослучайно выбранное значение long в диапазоне от указанной нижней границы (включительно) до указанной верхней границы (не включительно). |
void |
setSeed |
Выбрасывает UnsupportedOperationException. |
Методы, объявленные в классе Random
from, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextLong
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, объявленные в интерфейсе RandomGenerator
equiDoubles, isDeprecated, nextExponential, nextGaussian
Подробное описание методов
current
public static ThreadLocalRandom current()
ThreadLocalRandom текущего потока. Методы этого объекта должны вызываться только текущим потоком, а не другими потоками.- Возвращает:
- объект
ThreadLocalRandomтекущего потока
setSeed
public void setSeed(long seed)
UnsupportedOperationException. Установка начальных значений в этом генераторе не поддерживается.- Переопределяет:
-
setSeedв классеRandom - Параметры:
-
seed— начальное значение - Выбрасывает:
-
UnsupportedOperationException— всегда
next
protected int next(int bits)
nextInt
public int nextInt(int bound)
int в диапазоне от 0 (включительно) до указанного значения (исключительно), полученное из последовательности этого генератора случайных чисел. Общий контракт метода nextInt заключается в том, что одно значение int из указанного диапазона генерируется псевдослучайным образом и возвращается. Все возможные значения bound int выдаются с (приблизительно) одинаковой вероятностью.- Определён в:
-
nextIntв интерфейсеRandomGenerator - Переопределяет:
-
nextIntв классеRandom - Параметры:
-
bound— верхняя граница (исключительно). Должна быть положительной. - Возвращает:
- следующее псевдослучайное равномерно распределённое значение
intв диапазоне от нуля (включительно) доbound(исключительно) из последовательности этого генератора случайных чисел - Выбрасывает:
-
IllegalArgumentException— если bound не является положительным
nextInt
public int nextInt(int origin, int bound)
int в диапазоне от указанного начала (включительно) до указанной верхней границы (исключительно).- Параметры:
-
origin— наименьшее возвращаемое значение -
bound— верхняя граница возвращаемого значения (исключительно) - Возвращает:
- псевдослучайно выбранное значение
intв диапазоне от начала (включительно) до верхней границы (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиoriginбольше или равноbound
nextLong
public long nextLong(long bound)
long в диапазоне от нуля (включительно) до указанной верхней границы (исключительно).- Параметры:
-
bound— верхняя граница возвращаемого значения (исключительно). Должна быть положительной. - Возвращает:
- псевдослучайно выбранное значение
longв диапазоне от нуля (включительно) до верхней границы (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиboundне является положительным
nextLong
public long nextLong(long origin, long bound)
long в диапазоне от указанного начала (включительно) до указанной верхней границы (исключительно).- Параметры:
-
origin— наименьшее возвращаемое значение -
bound— верхняя граница возвращаемого значения (исключительно) - Возвращает:
- псевдослучайно выбранное значение
longв диапазоне от начала (включительно) до верхней границы (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиoriginбольше или равноbound
nextFloat
public float nextFloat(float bound)
float в диапазоне от нуля (включительно) до указанной верхней границы (исключительно).- Примечание по реализации:
- Параметры:
-
bound— верхняя граница возвращаемого значения (исключительно). Должна быть положительной и конечной - Возвращает:
- псевдослучайно выбранное значение
floatв диапазоне от нуля (включительно) до верхней границы (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиboundне является одновременно положительным и конечным - С версии:
- 17
nextFloat
public float nextFloat(float origin, float bound)
float в диапазоне от указанного начала (включительно) до указанной верхней границы (исключительно).- Примечание по реализации:
- Параметры:
-
origin— наименьшее возвращаемое значение -
bound— верхняя граница (исключительно) - Возвращает:
- псевдослучайно выбранное значение
floatв диапазоне от начала (включительно) до верхней границы (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиoriginне является конечным, илиboundне является конечным, илиoriginбольше или равноbound - С версии:
- 17
nextDouble
public double nextDouble(double bound)
double в диапазоне от нуля (включительно) до указанной верхней границы (исключительно).- Примечание по реализации:
- Параметры:
-
bound— верхняя граница возвращаемого значения (исключительно). Должна быть положительной и конечной - Возвращает:
- псевдослучайно выбранное значение
doubleв диапазоне от нуля (включительно) до верхней границы (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиboundне является одновременно положительным и конечным
nextDouble
public double nextDouble(double origin, double bound)
double в диапазоне от указанного начала (включительно) до указанной верхней границы (исключительно).- Примечание по реализации:
- Параметры:
-
origin— наименьшее возвращаемое значение -
bound— верхняя граница возвращаемого значения (исключительно) - Возвращает:
- псевдослучайно выбранное значение
doubleв диапазоне от начала (включительно) до верхней границы (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиoriginне является конечным, илиboundне является конечным, илиoriginбольше или равноbound
ints
public IntStream ints(long streamSize)
streamSize псевдослучайных значений int. Псевдослучайное значение int генерируется так, как если бы оно было результатом вызова метода Random.nextInt().
- Определён в:
-
intsв интерфейсеRandomGenerator - Переопределяет:
-
intsв классеRandom - Параметры:
-
streamSize— количество генерируемых значений - Возвращает:
- поток псевдослучайных значений
int - Выбрасывает:
-
IllegalArgumentException— еслиstreamSizeменьше нуля - С версии:
- 1.8
ints
public IntStream ints()
int. Псевдослучайное значение int генерируется так, как если бы оно было результатом вызова метода Random.nextInt().
- Определён в:
-
intsв интерфейсеRandomGenerator - Переопределяет:
-
intsв классеRandom - Примечание по реализации:
- Этот метод реализован так, чтобы быть эквивалентным
ints(Long.MAX_VALUE). - Возвращает:
- поток псевдослучайных значений
int - С версии:
- 1.8
ints
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
streamSize псевдослучайных значений int, каждое из которых соответствует заданному началу (включительно) и верхней границе (исключительно). Псевдослучайное значение int генерируется так, как если бы оно было результатом вызова следующего метода с указанными началом и верхней границей:
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в интерфейсеRandomGenerator - Переопределяет:
-
intsв классеRandom - Параметры:
-
streamSize— количество генерируемых значений -
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— верхняя граница (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных значений
int, каждое из которых имеет указанное начало (включительно) и верхнюю границу (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиstreamSizeменьше нуля илиrandomNumberOriginбольше или равноrandomNumberBound - С версии:
- 1.8
ints
public IntStream ints(int randomNumberOrigin, int randomNumberBound)
int, каждое из которых соответствует заданному началу (включительно) и верхней границе (исключительно). Псевдослучайное значение int генерируется так, как если бы оно было результатом вызова следующего метода с указанными началом и верхней границей:
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в интерфейсеRandomGenerator - Переопределяет:
-
intsв классеRandom - Примечание по реализации:
- Этот метод реализован так, чтобы быть эквивалентным
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Параметры:
-
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— верхняя граница (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных значений
int, каждое из которых имеет указанное начало (включительно) и верхнюю границу (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиrandomNumberOriginбольше или равноrandomNumberBound - С версии:
- 1.8
longs
public LongStream longs(long streamSize)
streamSize псевдослучайных значений long. Псевдослучайное значение long генерируется так, как если бы оно было результатом вызова метода Random.nextLong().
- Определён в:
-
longsв интерфейсеRandomGenerator - Переопределяет:
-
longsв классеRandom - Параметры:
-
streamSize— количество генерируемых значений - Возвращает:
- поток псевдослучайных значений
long - Выбрасывает:
-
IllegalArgumentException— еслиstreamSizeменьше нуля - С версии:
- 1.8
longs
public LongStream longs()
long. Псевдослучайное значение long генерируется так, как если бы оно было результатом вызова метода Random.nextLong().
- Определён в:
-
longsв интерфейсеRandomGenerator - Переопределяет:
-
longsв классеRandom - Примечание по реализации:
- Этот метод реализован так, чтобы быть эквивалентным
longs(Long.MAX_VALUE). - Возвращает:
- поток псевдослучайных значений
long - С версии:
- 1.8
longs
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
streamSize псевдослучайных значений long, каждое из которых соответствует заданному началу (включительно) и верхней границе (исключительно). Псевдослучайное значение long генерируется так, как если бы оно было результатом вызова следующего метода с указанными началом и верхней границей:
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в интерфейсеRandomGenerator - Переопределяет:
-
longsв классеRandom - Параметры:
-
streamSize— количество генерируемых значений -
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— верхняя граница (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных значений
long, каждое из которых имеет указанное начало (включительно) и верхнюю границу (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиstreamSizeменьше нуля илиrandomNumberOriginбольше или равноrandomNumberBound - С версии:
- 1.8
longs
public LongStream longs(long randomNumberOrigin, long randomNumberBound)
long, каждое из которых соответствует заданному началу (включительно) и верхней границе (исключительно). Псевдослучайное значение long генерируется так, как если бы оно было результатом вызова следующего метода с указанными началом и верхней границей:
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в интерфейсеRandomGenerator - Переопределяет:
-
longsв классеRandom - Примечание по реализации:
- Этот метод реализован так, чтобы быть эквивалентным
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Параметры:
-
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— верхняя граница (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных значений
long, каждое из которых имеет указанное начало (включительно) и верхнюю границу (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиrandomNumberOriginбольше или равноrandomNumberBound - С версии:
- 1.8
doubles
public DoubleStream doubles(long streamSize)
streamSize псевдослучайных значений double, каждое из которых находится в диапазоне от нуля (включительно) до единицы (исключительно). Псевдослучайное значение double генерируется так, как если бы оно было результатом вызова метода Random.nextDouble().
- Определён в:
-
doublesв интерфейсеRandomGenerator - Переопределяет:
-
doublesв классеRandom - Параметры:
-
streamSize— количество генерируемых значений - Возвращает:
- поток значений
double - Выбрасывает:
-
IllegalArgumentException— еслиstreamSizeменьше нуля - С версии:
- 1.8
doubles
public DoubleStream doubles()
double, каждое из которых находится в диапазоне от нуля (включительно) до единицы (исключительно). Псевдослучайное значение double генерируется так, как если бы оно было результатом вызова метода Random.nextDouble().
- Определён в:
-
doublesв интерфейсеRandomGenerator - Переопределяет:
-
doublesв классеRandom - Примечание по реализации:
- Этот метод реализован так, чтобы быть эквивалентным
doubles(Long.MAX_VALUE). - Возвращает:
- поток псевдослучайных значений
double - С версии:
- 1.8
doubles
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
streamSize псевдослучайных значений double, каждое из которых соответствует указанному началу (включительно) и верхней границе (исключительно).- Определён в:
-
doublesв интерфейсеRandomGenerator - Переопределяет:
-
doublesв классеRandom - Параметры:
-
streamSize— количество генерируемых значений -
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— верхняя граница (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных значений
double, каждое из которых имеет указанное начало (включительно) и верхнюю границу (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиstreamSizeменьше нуля, илиrandomNumberOriginне является конечным, илиrandomNumberBoundне является конечным, илиrandomNumberOriginбольше или равноrandomNumberBound - С версии:
- 1.8
doubles
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
double, каждое из которых соответствует указанному началу (включительно) и верхней границе (исключительно).- Определён в:
-
doublesв интерфейсеRandomGenerator - Переопределяет:
-
doublesв классеRandom - Примечание по реализации:
- Этот метод реализован так, чтобы быть эквивалентным
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Параметры:
-
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— верхняя граница (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных значений
double, каждое из которых имеет указанное начало (включительно) и верхнюю границу (исключительно) - Выбрасывает:
-
IllegalArgumentException— еслиrandomNumberOriginне является конечным, илиrandomNumberBoundне является конечным, илиrandomNumberOriginбольше или равноrandomNumberBound - С версии:
- 1.8
© 1993, 2025, 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/25/docs/api/java.base/java/util/concurrent/ThreadLocalRandom.html