Spec-Zone.ru › OpenJDK 25

Класс ThreadLocalRandom

java.lang.Object
java.util.Random
java.util.concurrent.ThreadLocalRandom
Все реализованные интерфейсы:
Serializable, RandomGenerator
public final class ThreadLocalRandom extends Random
Генератор случайных чисел (с периодом 264), изолированный для текущего потока. Подобно глобальному генератору Random, используемому классом Math, объект ThreadLocalRandom инициализируется внутренне сгенерированным начальным значением, которое в дальнейшем нельзя изменить. В многопоточных программах использование ThreadLocalRandom вместо общих объектов Random обычно приводит к значительно меньшим накладным расходам и конкуренции за ресурсы. Использование ThreadLocalRandom особенно уместно, когда несколько задач (например, каждая из них — ForkJoinTask) параллельно генерируют случайные числа в пулах потоков.

Обычно этот класс используют следующим образом: ThreadLocalRandom.current().nextX(...) (где X — это Int, Long и т. д.). При таком использовании невозможно случайно совместно использовать ThreadLocalRandom в нескольких потоках.

Этот класс также предоставляет дополнительные часто используемые методы генерации случайных чисел в заданном диапазоне.

Экземпляры ThreadLocalRandom не являются криптографически стойкими. В приложениях, критичных с точки зрения безопасности, вместо них следует использовать SecureRandom. Кроме того, экземпляры, созданные конструктором по умолчанию, не используют криптографически случайное начальное значение, если системное свойство java.util.secureRandomSeed не установлено в значение true.

Начиная с версии:
1.7
См. также:
  • Сериализованная форма

Краткое описание вложенных классов

Вложенные классы и интерфейсы, объявленные в интерфейсе RandomGenerator

RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator

Краткое описание методов

Модификатор и тип Метод Описание
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)
Генерирует псевдослучайное число с указанным количеством младших битов.
double nextDouble(double bound)
Возвращает псевдослучайно выбранное значение double в диапазоне от нуля (включительно) до указанной верхней границы (не включительно).
double nextDouble(double origin, double bound)
Возвращает псевдослучайно выбранное значение double в диапазоне от указанной нижней границы (включительно) до указанной верхней границы (не включительно).
float nextFloat(float bound)
Возвращает псевдослучайно выбранное значение float в диапазоне от нуля (включительно) до указанной верхней границы (не включительно).
float nextFloat(float origin, float bound)
Возвращает псевдослучайно выбранное значение float в диапазоне от указанной нижней границы (включительно) до указанной верхней границы (не включительно).
int nextInt(int bound)
Возвращает псевдослучайное равномерно распределенное значение int в диапазоне от 0 (включительно) до указанного значения (не включительно), выбранное из последовательности этого генератора случайных чисел.
int nextInt(int origin, int bound)
Возвращает псевдослучайно выбранное значение int в диапазоне от указанной нижней границы (включительно) до указанной верхней границы (не включительно).
long nextLong(long bound)
Возвращает псевдослучайно выбранное значение long в диапазоне от нуля (включительно) до указанной верхней границы (не включительно).
long nextLong(long origin, long bound)
Возвращает псевдослучайно выбранное значение long в диапазоне от указанной нижней границы (включительно) до указанной верхней границы (не включительно).
void setSeed(long seed)
Выбрасывает UnsupportedOperationException.

Методы, объявленные в классе Random

from, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextLong

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе RandomGenerator

equiDoubles, 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 — если bound не является положительным

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 не является одновременно положительным и конечным
С версии:
17

nextFloat

public float nextFloat(float origin, float bound)
Возвращает псевдослучайно выбранное значение float в диапазоне от указанного начала (включительно) до указанной верхней границы (исключительно).
Примечание по реализации:
Параметры:
origin — наименьшее возвращаемое значение
bound — верхняя граница (исключительно)
Возвращает:
псевдослучайно выбранное значение float в диапазоне от начала (включительно) до верхней границы (исключительно)
Выбрасывает:
IllegalArgumentException — если origin не является конечным, или bound не является конечным, или origin больше или равно bound
С версии:
17

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, каждое из которых соответствует указанному началу (включительно) и верхней границе (исключительно).
Определён в:
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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе документации Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/ThreadLocalRandom.html

Spec-Zone.ru

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