Класс 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.
- Since:
- 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, каждое из которых находится в диапазоне от нуля (включительно) до единицы (исключительно). |
DoubleStream |
doubles |
Возвращает поток, генерирующий заданное количество псевдослучайных значений double в диапазоне от заданного начала (включительно) до заданного конца (исключительно). |
IntStream |
ints() |
Возвращает бесконечный поток псевдослучайных значений int. |
IntStream |
ints |
Возвращает бесконечный поток псевдослучайных значений
int в диапазоне от заданного начала (включительно) до заданного конца (исключительно). |
IntStream |
ints |
Возвращает поток, генерирующий заданное количество псевдослучайных значений int. |
IntStream |
ints |
Возвращает поток, генерирующий заданное количество псевдослучайных значений int в диапазоне от заданного начала (включительно) до заданного конца (исключительно). |
LongStream |
longs() |
Возвращает бесконечный поток псевдослучайных значений long. |
LongStream |
longs |
Возвращает поток, генерирующий заданное количество псевдослучайных значений long. |
LongStream |
longs |
Возвращает бесконечный поток псевдослучайных значений
long в диапазоне от заданного начала (включительно) до заданного конца (исключительно). |
LongStream |
longs |
Возвращает поток, генерирующий заданное количество псевдослучайных значений 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
isDeprecated, nextExponential, nextGaussian
Подробное описание методов
current
public static ThreadLocalRandom current()
- Возвращает:
- текущий объект потока
setSeed
public void setSeed(long seed)
UnsupportedOperationException. Установка семян в этом генераторе не поддерживается.- Переопределяет:
-
setSeedв классеRandom - Параметры:
-
seed- значение семени - Бросает:
-
UnsupportedOperationException- всегда
next
protected int next(int bits)
- Переопределяет:
-
nextв классеRandom - Параметры:
-
bits- случайные биты - Возвращает:
- следующее псевдослучайное значение из последовательности этого генератора случайных чисел
nextInt
public int nextInt(int bound)
nextInt заключается в том, что одно целое значение в заданном диапазоне генерируется псевдослучайно и возвращается. Все возможные целые значения генерируются с (приблизительно) равной вероятностью.- Определено в:
-
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- верхняя граница (исключительно) для возвращаемого значения. Должно быть положительным. - Возвращает:
- псевдослучайное длинное целое число между нулём (включительно) и границей (исключительно)
- Бросает:
-
IllegalArgumentException- еслиboundне положительно
nextLong
public long nextLong(long origin, long bound)
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхняя граница (исключительно) для возвращаемого значения - Возвращает:
- псевдослучайное длинное целое число между началом (включительно) и границей (исключительно)
- Бросает:
-
IllegalArgumentException- еслиoriginбольше или равноbound
nextFloat
public float nextFloat(float bound)
- Примечание реализации:
- Параметры:
-
bound- верхняя граница (исключительно) для возвращаемого значения. Должно быть положительным и конечным - Возвращает:
- псевдослучайное число с плавающей точкой между нулём (включительно) и границей (исключительно)
- Бросает:
-
IllegalArgumentException- еслиboundне положительно и не конечно
nextFloat
public float nextFloat(float origin, float bound)
- Примечание реализации:
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхняя граница (исключительно) - Возвращает:
- псевдослучайное число с плавающей точкой между началом (включительно) и границей (исключительно)
- Бросает:
-
IllegalArgumentException- еслиoriginне конечно, илиboundне конечно, илиoriginбольше или равноbound
nextDouble
public double nextDouble(double bound)
- Примечание реализации:
- Параметры:
-
bound- верхняя граница (исключительно) для возвращаемого значения. Должно быть положительным и конечным - Возвращает:
- псевдослучайное число с двойной точностью между нулём (включительно) и границей (исключительно)
- Бросает:
-
IllegalArgumentException- еслиboundне положительно и не конечно
nextDouble
public double nextDouble(double origin, double bound)
- Примечание реализации:
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхняя граница (исключительно) для возвращаемого значения - Возвращает:
- псевдослучайное число с двойной точностью между началом (включительно) и границей (исключительно)
- Бросает:
-
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 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- граница (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных целых значений, каждое с заданным началом (включительно) и границей (исключительно)
- Бросает:
-
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, 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