SplittableRandom — 분할 가능한 의사 난수 생성기

SplittableRandom — 분할 가능한 의사 난수 생성기

int, long, double 타입의 균등 의사 난수값(주기 2^64)을 생성하는 생성기예요. 특히 하위 작업(subtask)을 생성할 수 있는 격리된 병렬 계산에 적용하기 좋아요.

출처: Java API Reference

본문

public final class SplittableRandom implements RandomGenerator, Serializable

사용법은 Random 클래스와 비슷하지만 다음과 같은 차이점이 있어요:

  • 생성된 값 계열은 난수 생성기의 독립성·균등성 속성을 검사하는 DieHarder 스위트를 통과해요. 생성값이 반복되기 전 계열의 길이인 주기(period)는 2^64예요.
  • split() 메서드는 현재 인스턴스와 가변 상태를 공유하지 않는SplittableRandom 인스턴스를 생성하고 반환해요.
  • SplittableRandom 인스턴스는 스레드 안전하지 않아요. 스레드 간에 공유되기보다는 분할되도록 설계됐어요.
  • 난수 스트림을 생성하는 추가 메서드를 제공하며, 이는 stream.parallel() 모드에서 위 기법을 사용해요.

SplittableRandom 인스턴스는 암호학적으로 안전하지 않아요.

주요 메서드

  • split() — 이 인스턴스와 가변 상태를 공유하지 않는 새 난수 생성기를 반환해요.
  • nextInt() / nextInt(int bound) — 균등 분포의 int 난수를 생성해요.
  • nextLong() — 균등 분포의 long 난수를 생성해요.
  • nextDouble() — 균등 분포의 double 난수를 생성해요.
  • ints(...) / longs(...) / doubles(...) — 난수를 생성하는 스트림을 반환해요.

더 알아보기 (Learn more)