Leniwa inicjalizacja bez blokad
Zastąp podwójnie sprawdzane blokowanie przez StableValue dla leniwych singletonów.
Porównanie kodu
✕ 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();
}
}
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Zero boilerplate
Bez volatile, synchronized ani podwójnego sprawdzania null.
Szybsze odczyty
JVM może zoptymalizować wartość po inicjalizacji.
Dowodliwa poprawność
Żadnych subtelnych błędów kolejności — JVM to obsługuje.
Stare podejście
synchronized + volatile
Nowoczesne podejście
StableValue
Od JDK
25
Poziom trudności
Zaawansowany
Wsparcie JDK
Leniwa inicjalizacja bez blokad
Preview
Podgląd w JDK 25 (JEP 502, StableValue). Wymaga --enable-preview
Jak to działa
StableValue hermetyzuje wzorzec leniwej inicjalizacji z poprawnym bezpieczeństwem wątków. JVM może zoptymalizować ścieżkę odczytu po inicjalizacji, co potencjalnie czyni go szybszym niż odczyty volatile.
Powiązana dokumentacja
Dowód