Класс ThreadLocalRandom
- java.lang.Object
-
- java.util.Random
-
- java.util.concurrent.ThreadLocalRandom
- Все реализованные интерфейсы:
- Serializable
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.
- Since:
- 1.7
- См. также:
- Формат сериализации
Методы
| Модификатор и тип | Метод и описание |
|---|---|
static ThreadLocalRandom |
current() Возвращает |
DoubleStream |
doubles() Возвращает эффективно неограниченный поток псевдослучайных значений |
DoubleStream |
doubles(double randomNumberOrigin,
double randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных значений |
DoubleStream |
doubles(long streamSize) Возвращает поток, генерирующий заданное количество |
DoubleStream |
doubles(long streamSize,
double randomNumberOrigin,
double randomNumberBound) Возвращает поток, генерирующий заданное количество |
IntStream |
ints() Возвращает эффективно неограниченный поток псевдослучайных значений |
IntStream |
ints(int randomNumberOrigin,
int randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных значений |
IntStream |
ints(long streamSize) Возвращает поток, генерирующий заданное количество |
IntStream |
ints(long streamSize,
int randomNumberOrigin,
int randomNumberBound) Возвращает поток, генерирующий заданное количество |
LongStream |
longs() Возвращает эффективно неограниченный поток псевдослучайных значений |
LongStream |
longs(long streamSize) Возвращает поток, генерирующий заданное количество |
LongStream |
longs(long randomNumberOrigin,
long randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных значений |
LongStream |
longs(long streamSize,
long randomNumberOrigin,
long randomNumberBound) Возвращает поток, генерирующий заданное количество |
protected int |
next(int bits) Генерирует следующее псевдослучайное число. |
boolean |
nextBoolean() Возвращает псевдослучайное значение |
double |
nextDouble() Возвращает псевдослучайное значение |
double |
nextDouble(double bound) Возвращает псевдослучайное значение |
double |
nextDouble(double origin,
double bound) Возвращает псевдослучайное значение |
float |
nextFloat() Возвращает псевдослучайное значение |
double |
nextGaussian() Возвращает следующее псевдослучайное значение |
int |
nextInt() Возвращает псевдослучайное значение |
int |
nextInt(int bound) Возвращает псевдослучайное значение |
int |
nextInt(int origin,
int bound) Возвращает псевдослучайное значение |
long |
nextLong() Возвращает псевдослучайное значение |
long |
nextLong(long bound) Возвращает псевдослучайное значение |
long |
nextLong(long origin,
long bound) Возвращает псевдослучайное значение |
void |
setSeed(long seed) Выбрасывает |
Методы, унаследованные от класса java.util.Random
nextBytes Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы
current
public static ThreadLocalRandom current()
Возвращает текущую нить ThreadLocalRandom.
- Возвращает:
- текущую нить
ThreadLocalRandom
setSeed
public void setSeed(long seed)
Бросает UnsupportedOperationException. Установка семян в этом генераторе не поддерживается.
- Переопределяет:
-
setSeedв классеRandom - Параметры:
-
seed- начальное семя - Бросает:
-
UnsupportedOperationException- всегда
next
protected int next(int bits)
Описание скопировано из класса: Random
Генерирует следующее псевдослучайное число. Подклассы должны переопределить это, так как это используется всеми другими методами.
Общий контракт next заключается в том, что он возвращает значение int, и если аргумент bits находится между 1 и 32 (включительно), то столько младших битов возвращаемого значения будут (приблизительно) независимо выбранными битовыми значениями, каждое из которых (приблизительно) равновероятно будет 0 или 1. Метод next реализован в классе Random путем атомарного обновления семени до
(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)и возвращения
(int)(seed >>> (48 - bits)).Это линейный конгруэнтный генератор псевдослучайных чисел, как определено Д. Х. Лемером и описано Дональдом Э. Кнутом в книге Искусство программирования, том 3: Получисленные алгоритмы, раздел 3.2.1.
- Переопределяет:
-
nextв классеRandom - Параметры:
-
bits- случайные биты - Возвращает:
- следующее псевдослучайное значение из последовательности этого генератора псевдослучайных чисел
nextInt
public int nextInt()
Возвращает псевдослучайное значение int.
nextInt
public int nextInt(int bound)
Возвращает псевдослучайное целое значение между нулем (включительно) и заданной границей (исключительно).
- Переопределяет:
-
nextIntв классеRandom - Параметры:
-
bound- верхняя граница (исключая). Должно быть положительным. - Возвращает:
- псевдослучайное целое значение между нулем (включительно) и границей (исключая)
- Бросает:
-
IllegalArgumentException- еслиboundне положительно
nextInt
public int nextInt(int origin,
int bound) Возвращает псевдослучайное целое значение между указанным началом (включительно) и заданной границей (исключая).
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхняя граница (исключая) - Возвращает:
- псевдослучайное целое значение между началом (включительно) и границей (исключая)
- Бросает:
-
IllegalArgumentException- еслиoriginбольше или равноbound
nextLong
public long nextLong()
Возвращает псевдослучайное значение long.
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
nextDouble
public double nextDouble()
Возвращает псевдослучайное значение с плавающей точкой между нулем (включительно) и единицей (исключительно).
- Переопределяет:
-
nextDoubleв классеRandom - Возвращает:
- псевдослучайное значение с плавающей точкой между нулем (включительно) и единицей (исключительно)
- См. также:
Math.random()
nextDouble
public double nextDouble(double bound)
Возвращает псевдослучайное значение с плавающей точкой между 0,0 (включительно) и указанной границей (исключительно).
- Параметры:
-
bound- верхняя граница (исключая). Должно быть положительным. - Возвращает:
- псевдослучайное значение с плавающей точкой между нулем (включительно) и границей (исключая)
- Бросает:
-
IllegalArgumentException- еслиboundне положительно
nextDouble
public double nextDouble(double origin,
double bound) Возвращает псевдослучайное значение с плавающей точкой между указанным началом (включительно) и границей (исключая).
- Параметры:
-
origin- наименьшее возвращаемое значение -
bound- верхняя граница (исключая) - Возвращает:
- псевдослучайное значение с плавающей точкой между началом (включительно) и границей (исключая)
- Бросает:
-
IllegalArgumentException- еслиoriginбольше или равноbound
nextBoolean
public boolean nextBoolean()
Возвращает псевдослучайное булево значение.
- Переопределяет:
-
nextBooleanв классеRandom - Возвращает:
- псевдослучайное булево значение
nextFloat
public float nextFloat()
Возвращает псевдослучайное значение с плавающей точкой между нулем (включительно) и единицей (исключительно).
- Переопределяет:
-
nextFloatв классеRandom - Возвращает:
- псевдослучайное значение с плавающей точкой между нулем (включительно) и единицей (исключительно)
nextGaussian
public double nextGaussian()
Описание скопировано из класса: Random
Возвращает следующее псевдослучайное гауссово («нормальное») распределение double со средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора псевдослучайных чисел.
Общий контракт nextGaussian заключается в том, что одно double значение, выбранное (приблизительно) из обычного нормального распределения со средним значением 0.0 и стандартным отклонением 1.0, генерируется псевдослучайно и возвращается.
Метод nextGaussian реализован в классе Random как если бы с помощью потокобезопасной версии следующего:
private double nextNextGaussian;
private boolean haveNextNextGaussian = false;
public double nextGaussian() {
if (haveNextNextGaussian) {
haveNextNextGaussian = false;
return nextNextGaussian;
} else {
double v1, v2, s;
do {
v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0
v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0
s = v1 * v1 + v2 * v2;
} while (s >= 1 || s == 0);
double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s);
nextNextGaussian = v2 * multiplier;
haveNextNextGaussian = true;
return v1 * multiplier;
}
} Это использует полярный метод Г. Э. П. Бокса, М. Э. Мюллера и Г. Марсаглии, как описано Дональдом Э. Кнутом в Искусстве программирования, том 3: Получисленные алгоритмы, раздел 3.4.1, подсекция C, алгоритм P. Обратите внимание, что он генерирует два независимых значения ценой всего одного вызова StrictMath.log и одного вызова StrictMath.sqrt.- Переопределяет:
-
nextGaussianв классеRandom - Возвращает:
- следующее псевдослучайное гауссово («нормальное») распределение
doubleсо средним значением0.0и стандартным отклонением1.0из последовательности этого генератора псевдослучайных чисел
ints
public IntStream ints(long streamSize)
Возвращает поток, генерирующий заданное количество streamSize псевдослучайных int значений.
- Переопределяет:
-
intsв классеRandom - Параметры:
-
streamSize- количество генерируемых значений - Возвращает:
- поток псевдослучайных
intзначений - Бросает:
-
IllegalArgumentException- еслиstreamSizeменьше нуля - С:
- 1.8
ints
public IntStream ints()
Возвращает эффективно неограниченный поток псевдослучайных int значений.
- Переопределяет:
-
intsв классеRandom - Примечание к реализации:
- Этот метод реализован для эквивалентности
ints(Long.MAX_VALUE). - Возвращает:
- поток псевдослучайных
intзначений - С:
- 1.8
ints
public IntStream ints(long streamSize,
int randomNumberOrigin,
int randomNumberBound) Возвращает поток, генерирующий заданное количество streamSize псевдослучайных int значений, каждое из которых соответствует заданному началу (включительно) и границе (исключая).
- Переопределяет:
-
intsв классеRandom - Параметры:
-
streamSize- количество генерируемых значений -
randomNumberOrigin- начало (включительно) каждого случайного значения -
randomNumberBound- граница (исключая) каждого случайного значения - Возвращает:
- поток псевдослучайных
intзначений, каждое с заданным началом (включительно) и границей (исключая) - Бросает:
-
IllegalArgumentException- еслиstreamSizeменьше нуля илиrandomNumberOriginбольше или равноrandomNumberBound - С:
- 1.8
ints
public IntStream ints(int randomNumberOrigin,
int randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных int значений, каждое из которых соответствует заданному началу (включительно) и границе (исключая).
- Overrides:
-
intsв классеRandom - Implementation Note:
- Этот метод реализован так, чтобы быть эквивалентным
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Parameters:
-
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— граница (исключительно) каждого случайного значения - Returns:
- поток псевдослучайных
intзначений, каждое с заданным началом (включительно) и границей (исключительно) - Throws:
-
IllegalArgumentException— еслиrandomNumberOriginбольше или равноrandomNumberBound - Since:
- 1.8
longs
public LongStream longs(long streamSize)
Возвращает поток, генерирующий заданное количество псевдослучайных streamSize значений.
- Overrides:
-
longsв классеRandom - Parameters:
-
streamSize— количество значений для генерации - Returns:
- поток псевдослучайных
longзначений - Throws:
-
IllegalArgumentException— еслиstreamSizeменьше нуля - Since:
- 1.8
longs
public LongStream longs()
Возвращает эффективно неограниченный поток псевдослучайных long значений.
- Overrides:
-
longsв классеRandom - Implementation Note:
- Этот метод реализован так, чтобы быть эквивалентным
longs(Long.MAX_VALUE). - Returns:
- поток псевдослучайных
longзначений - Since:
- 1.8
longs
public LongStream longs(long streamSize,
long randomNumberOrigin,
long randomNumberBound) Возвращает поток, генерирующий заданное количество псевдослучайных streamSize значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
- Overrides:
-
longsв классеRandom - Parameters:
-
streamSize— количество значений для генерации -
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— граница (исключительно) каждого случайного значения - Returns:
- поток псевдослучайных
longзначений, каждое с заданным началом (включительно) и границей (исключительно) - Throws:
-
IllegalArgumentException— еслиstreamSizeменьше нуля илиrandomNumberOriginбольше или равноrandomNumberBound - Since:
- 1.8
longs
public LongStream longs(long randomNumberOrigin,
long randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных long значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
- Overrides:
-
longsв классеRandom - Implementation Note:
- Этот метод реализован так, чтобы быть эквивалентным
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Parameters:
-
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— граница (исключительно) каждого случайного значения - Returns:
- поток псевдослучайных
longзначений, каждое с заданным началом (включительно) и границей (исключительно) - Throws:
-
IllegalArgumentException— еслиrandomNumberOriginбольше или равноrandomNumberBound - Since:
- 1.8
doubles
public DoubleStream doubles(long streamSize)
Возвращает поток, генерирующий заданное количество псевдослучайных streamSize значений, каждое между нулём (включительно) и единицей (исключительно).
- Overrides:
-
doublesв классеRandom - Parameters:
-
streamSize— количество значений для генерации - Returns:
- поток
doubleзначений - Throws:
-
IllegalArgumentException— еслиstreamSizeменьше нуля - Since:
- 1.8
doubles
public DoubleStream doubles()
Возвращает эффективно неограниченный поток псевдослучайных double значений, каждое между нулём (включительно) и единицей (исключительно).
- Overrides:
-
doublesв классеRandom - Implementation Note:
- Этот метод реализован так, чтобы быть эквивалентным
doubles(Long.MAX_VALUE). - Returns:
- поток псевдослучайных
doubleзначений - Since:
- 1.8
doubles
public DoubleStream doubles(long streamSize,
double randomNumberOrigin,
double randomNumberBound) Возвращает поток, генерирующий заданное количество псевдослучайных streamSize значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
- Overrides:
-
doublesв классеRandom - Parameters:
-
streamSize— количество значений для генерации -
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— граница (исключительно) каждого случайного значения - Returns:
- поток псевдослучайных
doubleзначений, каждое с заданным началом (включительно) и границей (исключительно) - Throws:
-
IllegalArgumentException— еслиstreamSizeменьше нуля -
IllegalArgumentException— еслиrandomNumberOriginбольше или равноrandomNumberBound - Since:
- 1.8
doubles
public DoubleStream doubles(double randomNumberOrigin,
double randomNumberBound) Возвращает эффективно неограниченный поток псевдослучайных double значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
- Overrides:
-
doublesв классеRandom - Implementation Note:
- Этот метод реализован так, чтобы быть эквивалентным
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound). - Parameters:
-
randomNumberOrigin— начало (включительно) каждого случайного значения -
randomNumberBound— граница (исключительно) каждого случайного значения - Returns:
- поток псевдослучайных
doubleзначений, каждое с заданным началом (включительно) и границей (исключительно) - Throws:
-
IllegalArgumentException— еслиrandomNumberOriginбольше или равноrandomNumberBound - Since:
- 1.8
© 1993, 2020, 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.