안정적인 값
volatile 또는 synchronized 없는 스레드 안전한 지연 초기화.
코드 비교
✕ Java 8
private volatile Logger logger;
Logger getLogger() {
if (logger == null) {
synchronized (this) {
if (logger == null)
logger = createLogger();
}
}
return logger;
}
✓ Java 25 (Preview)
private final StableValue<Logger> logger =
StableValue.of(this::createLogger);
Logger getLogger() {
return logger.get();
}
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
보일러플레이트 제로
volatile, synchronized, null 확인이 없습니다.
JVM 최적화
JVM이 초기화 후 값을 최적화할 수 있습니다.
단 한 번 보장
공급자는 경합 상태에서도 정확히 한 번만 실행됩니다.
이전 방식
이중 검사 잠금
모던 방식
StableValue
JDK 버전
25
난이도
고급
JDK 지원
안정적인 값
프리뷰
JDK 25에서 프리뷰 (JEP 502). --enable-preview가 필요합니다.
동작 원리
StableValue는 내장 스레드 안전성을 갖춘 지연 초기화된 불변 값을 제공합니다. 이중 검사 잠금, volatile 필드, synchronized 블록이 필요 없습니다. JVM은 초기화 후 읽기 경로를 최적화할 수도 있습니다.
관련 문서