Класс SplittableRandom
Класс SplittableRandom из пакета java.util
представляет собой генератор псевдослучайных чисел,
который поддерживает операцию разветвления.
В отличие от обычного класса Random,
он не использует атомарные операции и поэтому работает быстрее
в однопоточных сценариях, а также позволяет создавать
независимые дочерние генераторы с помощью метода split.
Это особенно удобно при параллельных вычислениях,
когда каждому потоку нужен собственный источник случайных чисел.
Конструктор класса SplittableRandom может принимать
начальное зерно (seed) в первом параметре. Если зерно не указано,
генерируется случайное начальное значение.
Класс предоставляет методы nextInt, nextLong,
nextDouble, nextBoolean и другие для получения
случайных значений различных типов.
Синтаксис
SplittableRandom random = new SplittableRandom();
SplittableRandom random = new SplittableRandom(seed);
Пример
Давайте создадим генератор и получим несколько случайных чисел:
import java.util.SplittableRandom;
public class Main
{
public static void main(String[] args)
{
SplittableRandom random = new SplittableRandom(123);
System.out.println(random.nextInt());
System.out.println(random.nextLong());
System.out.println(random.nextDouble());
System.out.println(random.nextBoolean());
}
}
Результат выполнения кода:
-1188957731
-7232484386247168155
0.7231742029971469
true
Пример
Давайте получим случайное число в заданном диапазоне
с помощью метода nextInt с двумя параметрами:
import java.util.SplittableRandom;
public class Main
{
public static void main(String[] args)
{
SplittableRandom random = new SplittableRandom(42);
int res = random.nextInt(1, 100);
System.out.println(res);
}
}
Результат выполнения кода:
70
Пример
Давайте разветвим генератор на два независимых потока
с помощью метода split:
import java.util.SplittableRandom;
public class Main
{
public static void main(String[] args)
{
SplittableRandom random = new SplittableRandom(123);
SplittableRandom split1 = random.split();
SplittableRandom split2 = random.split();
System.out.println(split1.nextInt());
System.out.println(split2.nextInt());
}
}
Результат выполнения кода:
-1188957731
1051112573
Смотрите также
-
класс
Random,
который является классическим генератором случайных чисел -
класс
ThreadLocalRandom,
который оптимизирован для многопоточного использования -
метод
nextInt,
который возвращает случайное целое число -
метод
nextDouble,
который возвращает случайное число с плавающей точкой