Module java.base
Package java.util.random

Interface RandomGenerator.ArbitrarilyJumpableGenerator

所有超级接口:
RandomGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.StreamableGenerator
封闭接口:
RandomGenerator

public static interface RandomGenerator.ArbitrarilyJumpableGenerator extends RandomGenerator.LeapableGenerator
该接口旨在为生成伪随机值序列的对象提供一个通用协议,并可以轻松地向前“跳跃”到状态周期中的远处点。

理想情况下,通过从单个原始RandomGenerator.ArbitrarilyJumpableGenerator对象进行迭代跳跃生成的所有对象在统计上是相互独立的,并且在个体上是均匀的,前提是它们不遍历状态周期的重叠部分。实际上,人们必须接受对独立性和均匀性的某种近似。特别地,特定实现可以假定由jump()方法生成的流中的每个生成器用于生成不超过指定跳跃距离的值。建议实现者使用周期至少为2127的算法。

对于许多应用程序,向前跳跃一个二的幂或某个二的幂的小倍数就足够了,但是这个二的幂可能无法表示为long值。为了避免使用BigInteger值作为跳跃距离,而是使用double值。

提供了执行单个跳跃操作以及通过内部状态的迭代复制和跳跃生成原始生成器流的方法。多线程应用程序的典型策略是创建一个单一的RandomGenerator.ArbitrarilyJumpableGenerator对象,仅调用其jump()方法一次,然后从生成的流中分配生成器,每个线程一个。然而,每个生成器也是类型为RandomGenerator.ArbitrarilyJumpableGenerator;经过谨慎处理,可以使用不同的跳跃距离以各种方式遍历整个状态周期。

实现RandomGenerator.ArbitrarilyJumpableGenerator的对象通常不是密码安全的。考虑改用SecureRandom来获取密码安全的伪随机数生成器,供安全敏感的应用程序使用。