ThreadLocalRandom

ThreadLocalRandom (쓰레드에 격리된 난수 생성기)

현재 쓰레드에 격리된 난수 생성기(주기 2^64)예요. Math 클래스가 쓰는 전역 Random 생성기처럼 내부적으로 생성된 시드로 초기화되며, 시드는 수정할 수 없어요.

출처: Java API Reference

본문

동시성 프로그램에서 공유 Random 객체 대신 ThreadLocalRandom을 쓰면 오버헤드와 경합(contention)이 훨씬 줄어드는 경우가 많아요. 특히 여러 작업(예: 각 ForkJoinTask)이 쓰레드 풀에서 병렬로 난수를 사용할 때 적합해요.

이 클래스는 보통 이런 형태로 사용해요.

ThreadLocalRandom.current().nextInt(0, 100);

이런 형태로만 사용하면 여러 쓰레드에 걸쳐 ThreadLocalRandom을 실수로 공유할 일이 없어요. 이 클래스는 또한 흔히 쓰이는 경계 지정 난수 생성 메서드들을 제공해요.

int value = ThreadLocalRandom.current().nextInt(1, 101); // 1~100
long l = ThreadLocalRandom.current().nextLong();

ThreadLocalRandom 인스턴스는 암호학적으로 안전하지 않아요. 보안에 민감한 애플리케이션에서는 SecureRandom을 쓰는 걸 고려해야 해요. 또 기본 생성된 인스턴스는 시스템 프로퍼티 java.util.secureRandomSeedtrue로 설정되지 않으면 암호학적 난수 시드를 사용하지 않아요. 코드와 시그니처는 원문 그대로 보존돼요.

더 알아보기