モジュール java.base
パッケージ java.util.random

インタフェースRandomGenerator.JumpableGenerator

すべてのスーパー・インタフェース:
RandomGenerator, RandomGenerator.StreamableGenerator
既知のすべてのサブインタフェース:
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.LeapableGenerator
含まれているインタフェース:
RandomGenerator

public static interface RandomGenerator.JumpableGenerator extends RandomGenerator.StreamableGenerator
このインタフェースは、擬似乱数値を生成するオブジェクトに共通のプロトコルを提供するように設計されており、状態サイクル内の離れた場所に適度な量(たとえば264)で簡単に前方にジャンプできます。

理想的には、1つの元のRandomGenerator.JumpableGeneratorオブジェクトからの反復ジャンプによって生成されたすべてのRandomGenerator.JumpableGeneratorオブジェクトは、統計的に相互に独立しており、個別に均一です。 実際には、ある程度の近似で独立性と均一性を決める必要があります。 特に、特定の実装では、jump()メソッドによって生成されたストリームの各ジェネレータを使用して、264またはその期間の平方根以下の数値を生成できます。 実装者は、期間が2127以上のアルゴリズムを使用することをお薦めします。

単一のジャンプ操作を実行し、内部状態の反復的なコピーとジャンプによってオリジナルから生成されるジェネレータのストリームを生成する方法も用意されています。 マルチスレッド・アプリケーションの一般的な方法は、単一のRandomGenerator.JumpableGeneratorオブジェクトを作成し、そのjump()メソッドを1回だけ呼び出してから、結果のストリームから1つずつ、各スレッドに1つずつジェネレータをパーティション化することです。 通常、jump()メソッドによって生成されたジェネレータでjump()をコールすることはお薦めしません。結果は、jump()メソッドへのコールによってすでに生成された別のジェネレータと同じジェネレータの場合があるためです。 このため、ストリーム内の実際のジェネレータ・オブジェクトもRandomGenerator.JumpableGeneratorインタフェースを実装する可能性が高い場合でも、jumps()メソッドの戻り型はStream<RandomGenerator.JumpableGenerator>ではなくStream<RandomGenerator>です。

RandomGenerator.JumpableGeneratorを実装するオブジェクトは通常、暗号方式ではセキュアではありません。 セキュリティ保護を必要とするアプリケーションで使用するために安全な暗号化の施された擬似乱数ジェネレータを取得するには、代わりにSecureRandomを使用することを検討してください。