Concurrency Experte

Thread-sichere Lazy-Initialisierung ohne volatile oder 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();
}
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🧹

Null Boilerplate

Kein volatile, synchronized oder Null-Prüfungen.

JVM-optimiert

Die JVM kann den Wert nach der Initialisierung falten.

🛡️

Garantiert einmalig

Der Supplier wird genau einmal ausgeführt, auch unter Contention.

Alter Ansatz
Double-Checked Locking
Moderner Ansatz
StableValue
Seit JDK
25
Schwierigkeitsgrad
Experte
Stable Values
Vorschau

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

StableValue bietet einen träge initialisierten, unveränderlichen Wert mit eingebauter Thread-Sicherheit. Kein Double-Checked Locking, keine volatile-Felder, keine synchronized-Blöcke. Die JVM kann den Lesepfad nach der Initialisierung sogar optimieren.

Teilen 𝕏 🦋 in