A generator of uniform pseudorandom values applicable for use in (among other contexts) isolated parallel computations that may generate subtasks. Class
SplittableRandom
supports methods for producing pseudorandom numbers of type
int
,
long
, and
double
with similar usages as for class
Random
but differs in the following ways:
- Series of generated values pass the DieHarder suite testing independence and uniformity properties of random number generators. (Most recently validated with version 3.31.1 .) These tests validate only the methods for certain types and ranges, but similar properties are expected to hold, at least approximately, for others as well. The period (length of any series of generated values before it repeats) is at least 264.
- Method
split()
constructs and returns a new SplittableRandom instance that shares no mutable state with the current instance. However, with very high probability, the values collectively generated by the two objects have the same statistical properties as if the same quantity of values were generated by a single thread using a single SplittableRandom
object.
- Instances of SplittableRandom are not thread-safe. They are designed to be split, not shared, across threads. For example, a
fork/join-style
computation using random numbers might include a construction of the form new Subtask(aSplittableRandom.split()).fork()
.
- This class provides additional methods for generating random streams, that employ the above techniques when used in
stream.parallel()
mode.
Instances of SplittableRandom
are not cryptographically secure. Consider instead using SecureRandom
in security-sensitive applications. Additionally, default-constructed instances do not use a cryptographically random seed unless the system property java.util.secureRandomSeed
is set to true
.