Concurrency Experte

Double-Checked Locking durch StableValue für Lazy-Singletons ersetzen.

✕ 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.
🧹

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
Sperrenfreie Lazy-Initialisierung
Vorschau

Preview in JDK 25 (JEP 502, StableValue). Erfordert --enable-preview.

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.

Teilen 𝕏 🦋 in