Класс 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
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе java.util.random.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. |
Методы, объявленные в классе java.util.Random
from, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextLong
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, объявленные в интерфейсе java.util.random.RandomGenerator
equiDoubles, isDeprecated, nextExponential, nextGaussian
Подробное описание методов
current
public static ThreadLocalRandom current()
- Возвращает:
- объект текущего потока
ThreadLocalRandom
setSeed
public void setSeed(long seed)
UnsupportedOperationException. Установка семян в этом генераторе не поддерживается.- Переопределяет:
-
setSeedв классеRandom - Параметры:
-
seed- значение семени - Выбрасывает:
-
UnsupportedOperationException- всегда
next
protected int next(int bits)
nextInt
public int nextInt(int bound)
nextInt заключается в том, что одно случайное целое значение в заданном диапазоне генерируется псевдослучайно и возвращается. Все возможные значения int генерируются с (приблизительно) равной вероятностью.- Определено в:
-
nextIntв интерфейсеRandomGenerator - Переопределяет:
-
nextIntв классеRandom - Параметры:
-
bound- верхняя граница (исключительно). Должно быть положительным. - Возвращает:
- следующее псевдослучайное, равномерно распределённое целое значение между нулём (включительно) и
bound(исключительно) из последовательности этого генератора псевдослучайных чисел - Выбрасывает:
-
IllegalArgumentException- если граница не положительна
nextInt
public int nextInt(int origin, int bound)
- Параметры:
-
origin- наименьшее значение, которое может быть возвращено -
bound- верхняя граница (исключительно) для возвращаемого значения - Возвращает:
- псевдослучайно выбранное целое значение между началом (включительно) и границей (исключительно)
- Выбрасывает:
-
IllegalArgumentException- еслиoriginбольше или равноbound
nextLong
public long nextLong(long bound)
- Параметры:
-
bound- верхняя граница (исключительно) для возвращаемого значения. Должно быть положительным. - Возвращает:
- псевдослучайно выбранное значение типа long между нулём (включительно) и границей (исключительно)
- Выбрасывает:
-
IllegalArgumentException- еслиboundне положительно
nextLong
public long nextLong(long origin, long bound)
- Параметры:
-
origin- наименьшее значение, которое может быть возвращено -
bound- верхняя граница (исключительно) для возвращаемого значения - Возвращает:
- псевдослучайно выбранное значение типа long между началом (включительно) и границей (исключительно)
- Выбрасывает:
-
IllegalArgumentException- еслиoriginбольше или равноbound
nextFloat
public float nextFloat(float bound)
- Примечание для реализации:
- Параметры:
-
bound- верхняя граница (исключительно) для возвращаемого значения. Должно быть положительным и конечным - Возвращает:
- псевдослучайно выбранное значение типа float между нулём (включительно) и границей (исключительно)
- Выбрасывает:
-
IllegalArgumentException- еслиboundне является положительным и конечным - С:
- 17
nextFloat
public float nextFloat(float origin, float bound)
- Примечание для реализации:
- Параметры:
-
origin- наименьшее значение, которое может быть возвращено -
bound- верхняя граница (исключительно) - Возвращает:
- псевдослучайно выбранное значение типа float между началом (включительно) и границей (исключительно)
- Выбрасывает:
-
IllegalArgumentException- еслиoriginне является конечным, илиboundне является конечным, илиoriginбольше или равноbound - С:
- 17
nextDouble
public double nextDouble(double bound)
- Примечание для реализации:
- Параметры:
-
bound- верхняя граница (исключительно) для возвращаемого значения. Должно быть положительным и конечным - Возвращает:
- псевдослучайно выбранное значение типа double между нулём (включительно) и границей (исключительно)
- Выбрасывает:
-
IllegalArgumentException- еслиboundне является положительным и конечным
nextDouble
public double nextDouble(double origin, double bound)
- Примечание для реализации:
- Параметры:
-
origin- наименьшее значение, которое может быть возвращено -
bound- верхняя граница (исключительно) для возвращаемого значения - Возвращает:
- псевдослучайно выбранное значение типа double между началом (включительно) и границей (исключительно)
- Выбрасывает:
-
IllegalArgumentException- еслиoriginне является конечным, илиboundне является конечным, илиoriginбольше или равноbound
ints
public IntStream ints(long streamSize)
Псевдослучайное целое значение генерируется как результат вызова метода Random.nextInt().
- Определено в:
-
intsв интерфейсеRandomGenerator - Переопределяет:
-
intsв классеRandom - Параметры:
-
streamSize- количество значений для генерации - Возвращает:
- поток псевдослучайных целых значений
- Выбрасывает:
-
IllegalArgumentException- еслиstreamSizeменьше нуля - С:
- 1.8
ints
public IntStream ints()
Псевдослучайное целое значение генерируется как результат вызова метода Random.nextInt().
- Определено в:
-
intsв интерфейсеRandomGenerator - Переопределяет:
-
intsв классеRandom - Примечание для реализации:
- Этот метод реализован для эквивалентности
ints(Long.MAX_VALUE). - Возвращает:
- поток псевдослучайных целых значений
- С:
- 1.8
ints
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
Псевдослучайное целое значение генерируется как результат вызова следующего метода с началом и границей:
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- граница (исключительно) для каждого случайного значения - Возвращает:
- поток псевдослучайных целых значений, каждое из которых имеет заданное начало (включительно) и границу (исключительно)
- Выбрасывает:
-
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)
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)
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)
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)
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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/ThreadLocalRandom.html