티스토리 뷰
728x90
리뷰어 희봉이 "Random과 ThreadLocalRandom의 차이점이 무엇일까요?"라는 질문을 던져주셨다. 🙇♀️
나는 그동안 Random를 사용하면서도 이에 대한 정확한 학습이나 이것 보다 더 적절한 라이브러리는 없는지에 대한 생각을 한적이 없었다.
덕분에 Java 표준 라이브러리에서 제공하는 랜덤 넘버 생성 기능이 Random, ThreadLocalRandom, SecureRandom 등 다양하다는 것을 알게 되었다. (추가 학습이 필요하다!!)
Java7부터 다중 스레드 프로그램을 위한 ThreadLocalRandom이 추가되었다.
ThreadLocalRandom는 Random과 같은 기능을 제공하면서도 다음과 같은 장점을 가진다.
- 스레드 세이프(Thread Safe)하다.
- 다중 스레드 프로그램에서 Random의 성능 저하를 보완한다.
✅ [이펙티브 자바 3/E]에서는 ThreadLocalRandom 사용을 추천하고 있다.
기존의 Random 사용 코드를 ThreadLocalRandom을 사용하는 방식으로 변경하였으며, 테스트 코드를 추가하였다.
before
public static int pickRandomNumber() {
return new Random().nextInt(END_EXCLUSIVE);
}
after
public static int pickRandomNumber() {
return ThreadLocalRandom.current().nextInt(END_EXCLUSIVE);
}
@SuppressWarnings("NonAsciiCharacters")
public class RandomNumberGeneratorTest {
@Test
void 랜덤_넘버_생성_확인() {
int randomNumber = RandomNumberGenerator.pickRandomNumber();
assertThat(randomNumber)
.isGreaterThanOrEqualTo(0)
.isLessThanOrEqualTo(9);
}
}
Ref.
https://www.baeldung.com/java-thread-local-random
728x90
'Backend > Java' 카테고리의 다른 글
Null vs. Empty vs. Blank (feat. isEmpty, isBlank) (2) | 2022.02.18 |
---|---|
부생성자에서 주생성자를 호출하라 (0) | 2022.02.17 |
@SupperessWarning의 쓰임을 알고 사용하자 (0) | 2022.02.14 |
[우아한테크코스/프리코스] 2주차 백엔드 피드백 (0) | 2021.12.08 |
[우아한테크코스/프리코스] 1주차 백엔드 피드백 (0) | 2021.12.04 |
댓글
공지사항
최근에 올라온 글