Spec-Zone.ru › OpenJDK 8

Класс 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()

Возвращает ThreadLocalRandom текущего потока.

DoubleStream doubles()

Возвращает эффективно неограниченный поток псевдослучайных значений double, каждое из которых находится между нулем (включительно) и единицей (исключительно).

DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)

Возвращает эффективно неограниченный поток псевдослучайных значений double, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

DoubleStream doubles(long streamSize)

Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений double, каждое из которых находится между нулем (включительно) и единицей (исключительно).

DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)

Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений double, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

IntStream ints()

Возвращает эффективно неограниченный поток псевдослучайных значений int.

IntStream ints(int randomNumberOrigin, int randomNumberBound)

Возвращает эффективно неограниченный поток псевдослучайных значений int, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

IntStream ints(long streamSize)

Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений int.

IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)

Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений int, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

LongStream longs()

Возвращает эффективно неограниченный поток псевдослучайных значений long.

LongStream longs(long streamSize)

Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений long.

LongStream longs(long randomNumberOrigin, long randomNumberBound)

Возвращает эффективно неограниченный поток псевдослучайных значений long, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)

Возвращает поток, генерирующий заданное количество streamSize псевдослучайных значений long, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

protected int next(int bits)

Генерирует следующее псевдослучайное число.

boolean nextBoolean()

Возвращает псевдослучайное значение boolean.

double nextDouble()

Возвращает псевдослучайное значение double между нулем (включительно) и единицей (исключительно).

double nextDouble(double bound)

Возвращает псевдослучайное значение double между 0.0 (включительно) и указанной границей (исключительно).

double nextDouble(double origin, double bound)

Возвращает псевдослучайное значение double между указанным началом (включительно) и границей (исключительно).

float nextFloat()

Возвращает псевдослучайное значение float между нулем (включительно) и единицей (исключительно).

double nextGaussian()

Возвращает следующее псевдослучайное значение double гауссова распределения («нормальное») со средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора псевдослучайных чисел.

int nextInt()

Возвращает псевдослучайное значение int.

int nextInt(int bound)

Возвращает псевдослучайное значение int между нулем (включительно) и указанной границей (исключительно).

int nextInt(int origin, int bound)

Возвращает псевдослучайное значение int между указанным началом (включительно) и указанной границей (исключительно).

long nextLong()

Возвращает псевдослучайное значение long.

long nextLong(long bound)

Возвращает псевдослучайное значение long между нулем (включительно) и указанной границей (исключительно).

long nextLong(long origin, long bound)

Возвращает псевдослучайное значение long между указанным началом (включительно) и указанной границей (исключительно).

void setSeed(long seed)

Выбрасывает UnsupportedOperationException.

Методы, унаследованные от класса 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 в классе Random
Возвращает:
псевдослучайное значение 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 в классе Random
Возвращает:
псевдослучайное значение 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API