Concurrency 고급

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 25에서 프리뷰 (JEP 502). --enable-preview가 필요합니다.

StableValue는 내장 스레드 안전성을 갖춘 지연 초기화된 불변 값을 제공합니다. 이중 검사 잠금, volatile 필드, synchronized 블록이 필요 없습니다. JVM은 초기화 후 읽기 경로를 최적화할 수도 있습니다.

공유 𝕏 🦋 in