Spec-Zone .ru
спецификации, руководства, описания, API
|
public class ThreadLocalRandom extends Random
Random
генератор, используемый Math
class, a ThreadLocalRandom
инициализируется с внутренне сгенерированным семенем, которое не может иначе быть изменено. Когда применимый, использование ThreadLocalRandom
вместо совместно используемого Random
объекты в параллельных программах будут обычно встречаться с намного меньшим количеством издержек и конкуренции. Использование ThreadLocalRandom
является особенно соответствующим когда многократные задачи (например, каждый a ForkJoinTask
) используйте случайные числа параллельно в пулах потоков. Использования этого class должны обычно иметь форму: ThreadLocalRandom.current().nextX(...)
(где X
Int
, Long
, и т.д.). Когда все использования имеют эту форму, никогда не возможно случайно совместно использовать a ThreadLocalRandom
через многократные потоки.
Этот class также обеспечивает дополнительные обычно используемые ограниченные случайные методы генерации.
Модификатор и Тип | Метод и Описание |
---|---|
static ThreadLocalRandom |
current()
Возвращает текущий поток
ThreadLocalRandom . |
DoubleStream |
doubles()
Возвращает поток псевдослучайных, однородно распределенных
double значения между 0.0 и 1.0 от последовательности этого генератора случайных чисел. |
DoubleStream |
gaussians()
Возвращает поток псевдослучайных, Гауссовых ("обычно") распределяемых
double значения со средним значением 0.0 и стандартное отклонение 1.0 от последовательности этого генератора случайных чисел. |
IntStream |
ints()
Возвращает поток псевдослучайных, однородно распределенных
integer значения от последовательности этого генератора случайных чисел. |
LongStream |
longs()
Возвращает поток псевдослучайных, однородно распределенных
long значения от последовательности этого генератора случайных чисел. |
protected int |
next(int bits)
Генерирует следующее псевдослучайное число.
|
double |
nextDouble(double n)
Возвращает псевдослучайное, однородно распределенное
double значение между 0 (содержащий) и указанное (монопольное) значение. |
double |
nextDouble(double least, double bound)
Возвращает псевдослучайное, однородно распределенное значение между данным наименьшее количество значения (включительно) и связанный (монопольный).
|
double |
nextGaussian()
Возвращает следующее псевдослучайное, Гауссово ("обычно") распределяемое
double значение со средним значением 0.0 и стандартное отклонение 1.0 от последовательности этого генератора случайных чисел. |
int |
nextInt(int least, int bound)
Возвращает псевдослучайное, однородно распределенное значение между данным наименьшее количество значения (включительно) и связанный (монопольный).
|
long |
nextLong(long n)
Возвращает псевдослучайное, однородно распределенное значение между 0 (содержащий) и указанное (монопольное) значение.
|
long |
nextLong(long least, long bound)
Возвращает псевдослучайное, однородно распределенное значение между данным наименьшее количество значения (включительно) и связанный (монопольный).
|
void |
setSeed(long seed)
Броски
UnsupportedOperationException . |
nextBoolean, nextBytes, nextDouble, nextFloat, nextInt, nextInt, nextLong
public static ThreadLocalRandom current()
ThreadLocalRandom
.ThreadLocalRandom
public void setSeed(long seed)
UnsupportedOperationException
. Установка семян в этом генераторе не поддерживается.setSeed
в class Random
seed
- начальное семяUnsupportedOperationException
- всегдаprotected int next(int bits)
Random
Общий контракт next
это, это возвращается int
значение и если параметр bits
между 1
и 32
(включительно), тогда то, что много битов младшего разряда возвращенного значения будут (приблизительно) независимо выбранными битовыми значениями, каждое из которых (приблизительно), одинаково вероятно, будет 0
или 1
. Метод next
реализуется class Random
атомарно обновляя семя к
(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)
и возврат (int)(seed >>> (48 - bits))
.
Это - линейный congruential генератор псевдослучайного числа, как определено Д. Х. Лехмером и описало Дональдом Э. Нутом в Искусстве Программирования, Объем 3: получисловые Алгоритмы, раздел 3.2.1.public int nextInt(int least, int bound)
least
- наименьшее количество значения возвратилосьbound
- (монопольная) верхняя границаIllegalArgumentException
- если наименее больше чем или равный связанномуpublic long nextLong(long n)
n
- привязанный случайное число, которое будет возвращено. Должно быть положительным.IllegalArgumentException
- если n не положителенpublic IntStream ints()
Random
integer
значения от последовательности этого генератора случайных чисел. Значения получаются как необходимый, вызывая Random.nextInt()
.public LongStream longs()
Random
long
значения от последовательности этого генератора случайных чисел. Значения получаются как необходимый, вызывая Random.nextLong()
.public DoubleStream doubles()
Random
double
значения между 0.0
и 1.0
от последовательности этого генератора случайных чисел. Значения получаются как необходимый, вызывая Random.nextDouble()
.public DoubleStream gaussians()
Random
double
значения со средним значением 0.0
и стандартное отклонение 1.0
от последовательности этого генератора случайных чисел. Значения получаются как необходимый, вызывая Random.nextGaussian()
.public long nextLong(long least, long bound)
least
- наименьшее количество значения возвратилосьbound
- (монопольная) верхняя границаIllegalArgumentException
- если наименее больше чем или равный связанномуpublic double nextDouble(double n)
double
значение между 0 (содержащий) и указанное (монопольное) значение.n
- привязанный случайное число, которое будет возвращено. Должно быть положительным.IllegalArgumentException
- если n не положителенpublic double nextDouble(double least, double bound)
least
- наименьшее количество значения возвратилосьbound
- (монопольная) верхняя границаIllegalArgumentException
- если наименее больше чем или равный связанномуpublic double nextGaussian()
Random
double
значение со средним значением 0.0
и стандартное отклонение 1.0
от последовательности этого генератора случайных чисел. Общий контракт nextGaussian
тот double
значение, выбранное из (приблизительно) обычного нормального распределения со средним значением 0.0
и стандартное отклонение 1.0
, псевдобеспорядочно сгенерирован и возвращен.
Метод nextGaussian
реализуется class 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, алгоритм П. Ноут, что это генерирует два независимых значения за счет только одного звонка StrictMath.log
и один звонок StrictMath.sqrt
.nextGaussian
в class Random
double
значение со средним значением 0.0
и стандартное отклонение 1.0
от последовательности этого генератора случайных чисел
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92