Sperrenfreie Lazy-Initialisierung
Double-Checked Locking durch StableValue für Lazy-Singletons ersetzen.
Code-Vergleich
✕ 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();
}
}
Problem mit diesem Code entdeckt? Sag uns Bescheid.
Warum der moderne Weg gewinnt
Kein Boilerplate
Kein volatile, synchronized oder doppelte Null-Prüfung.
Schnellere Lesevorgänge
Die JVM kann den Wert nach der Initialisierung konstant falten.
Nachweislich korrekt
Keine subtilen Reihenfolge-Fehler — die JVM kümmert sich darum.
Alter Ansatz
synchronized + volatile
Moderner Ansatz
StableValue
Seit JDK
25
Schwierigkeitsgrad
Experte
JDK-Unterstützung
Sperrenfreie Lazy-Initialisierung
Vorschau
Preview in JDK 25 (JEP 502, StableValue). Erfordert --enable-preview.
Wie es funktioniert
StableValue kapselt das Lazy-Initialisierungsmuster mit korrekter Thread-Sicherheit. Die JVM kann den Lesepfad nach der Initialisierung optimieren und ihn potenziell schneller als volatile-Lesevorgänge machen.
Zugehörige Dokumentation