Класс ThreadLocalRandom
- Все реализованные интерфейсы:
-
Serializable,RandomGenerator
public 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
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()
ThreadLocalRandom текущего потока. Методы этого объекта должны вызываться только текущим потоком, а не другими потоками.- Возвращает:
- объект
ThreadLocalRandomтекущего потока
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)
int значение между 0 (включительно) и указанным значением (исключительно), взятое из последовательности этого генератора псевдослучайных чисел. Общий контракт nextInt заключается в том, что одно int значение в указанном диапазоне генерируется псевдослучайно и возвращается. Все bound возможные int значения генерируются с (приблизительно) равной вероятностью.- Определено в:
-
nextIntв интерфейсеRandomGenerator - Переопределяет:
-
nextIntв классеRandom - Параметры:
-
bound- верхняя граница (исключительно). Должно быть положительным. - Возвращает:
- следующее псевдослучайное, равномерно распределённое
intзначение между нулём (включительно) иbound(исключительно) из последовательности этого генератора псевдослучайных чисел - Бросает:
-
IllegalArgumentException- если граница не положительна
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не является одновременно положительным и конечным
nextFloat
public float nextFloat(float origin, float bound)
float значение между указанным начальным значением (включительно) и указанным пределом (исключительно).- Примечание для реализации:
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхняя граница (исключительно) - Возвращает:
- псевдослучайно выбранное
floatзначение между началом (включительно) и пределом (исключительно) - Бросает:
-
IllegalArgumentException- еслиoriginне является конечным, илиboundне является конечным, илиoriginбольше или равноbound
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 значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно). Значение псевдослучайной double генерируется так, как будто оно является результатом вызова следующего метода с началом и границей:
double nextDouble(double origin, double bound) {
double r = nextDouble();
r = r * (bound - origin) + origin;
if (r >= bound) // correct for rounding
r = Math.nextDown(bound);
return r;
}
- Указано в:
-
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 значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно). Значение псевдослучайной double генерируется так, как будто оно является результатом вызова следующего метода с началом и границей:
double nextDouble(double origin, double bound) {
double r = nextDouble();
r = r * (bound - origin) + origin;
if (r >= bound) // correct for rounding
r = Math.nextDown(bound);
return r;
}
- Указано в:
-
doublesв интерфейсеRandomGenerator - Переопределяет:
-
doublesв классеRandom - Примечание об реализации:
- Этот метод реализован так, чтобы быть эквивалентным
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Параметры:
-
randomNumberOrigin- начало (включительно) каждого случайного значения -
randomNumberBound- граница (исключительно) каждого случайного значения - Возвращает:
- поток псевдослучайных
doubleзначений, каждое из которых имеет заданное начало (включительно) и границу (исключительно) - Выбрасывает:
-
IllegalArgumentException- еслиrandomNumberOriginбольше или равноrandomNumberBound - С:
- 1.8
© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/ThreadLocalRandom.html