Concurrency 고급

지연 초기화 싱글톤을 위해 이중 검사 잠금을 StableValue로 대체합니다.

✕ Java 8
class Config {
    private static volatile Config inst;
    static Config get() {
        if (inst == null) {
            synchronized (Config.class) {
                if (inst == null)
                    inst = load();
            }
        }
        return inst;
    }
}
✓ Java 25 (Preview)
class Config {
    private static final
        StableValue<Config> INST =
            StableValue.of(Config::load);

    static Config get() {
        return INST.get();
    }
}
이 코드에 문제가 있나요? 알려주세요.
🧹

보일러플레이트 없음

volatile, synchronized, 이중 null 확인이 필요 없습니다.

더 빠른 읽기

JVM이 초기화 후 상수로 최적화할 수 있습니다.

증명 가능한 정확성

미묘한 순서 버그 없음 — JVM이 처리합니다.

이전 방식
synchronized + volatile
모던 방식
StableValue
JDK 버전
25
난이도
고급
락 없는 지연 초기화
프리뷰

JDK 25에서 프리뷰 (JEP 502, StableValue). --enable-preview가 필요합니다.

StableValue는 올바른 스레드 안전성으로 지연 초기화 패턴을 캡슐화합니다. JVM은 초기화 후 읽기 경로를 최적화하여 volatile 읽기보다 빠르게 만들 수 있습니다.

공유 𝕏 🦋 in