Module java.base
Package java.util.random

Interface RandomGenerator.LeapableGenerator

所有超级接口:
RandomGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.StreamableGenerator
所有已知子接口:
RandomGenerator.ArbitrarilyJumpableGenerator
封装接口:
RandomGenerator

public static interface RandomGenerator.LeapableGenerator extends RandomGenerator.JumpableGenerator
该接口旨在为生成伪随机值序列的对象提供一个通用协议,不仅可以轻松地跳跃,而且还可以向前“跃进”(例如2128)到状态周期中的一个非常遥远的点。通常,人们将通过从单个原始RandomGenerator.LeapableGenerator对象进行迭代跃迁来构造一系列RandomGenerator.LeapableGenerator对象,然后对每个这样的对象生成一系列对象通过迭代跳跃。在跃迁和跳跃之间几乎没有概念上的区别,但通常跃迁将是状态周期中的一个非常长的跳跃(也许是2128的距离)。

理想情况下,通过从单个原始RandomGenerator.LeapableGenerator对象进行迭代跃迁和跳跃生成的所有RandomGenerator.LeapableGenerator对象彼此之间是统计独立的,并且各自是均匀的。实际上,人们必须接受对独立性和均匀性的某种近似。特别地,特定实现可以假定由leaps方法生成的流中的每个生成器用于生成(通过跳跃)不超过264的对象。建议实现者使用周期至少为2191的算法。

提供了执行单个跃迁操作以及生成从原始生成器通过内部状态的迭代复制和跃迁产生的生成器流的方法。生成的生成器必须实现RandomGenerator.JumpableGenerator接口,但不必实现RandomGenerator.LeapableGenerator接口。多线程应用程序的典型策略是创建一个单一的RandomGenerator.LeapableGenerator对象,仅调用其leaps方法一次,然后从生成的流中分配生成器,每个线程一个。然后调用每个这样的生成器的jump()方法以生成生成器对象的子流。

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