Concurrency Avanzato

Inizializzazione lazy thread-safe senza volatile o 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();
}
Vedi un problema con questo codice? Faccelo sapere.
🧹

Zero boilerplate

Nessun volatile, synchronized o controlli null.

Ottimizzato dalla JVM

La JVM può piegare il valore dopo l'inizializzazione.

🛡️

Garantito una volta

Il supplier viene eseguito esattamente una volta, anche sotto contesa.

Approccio Vecchio
Double-checked locking
Approccio Moderno
StableValue
Dal JDK
25
Difficoltà
Avanzato
Valori stabili
Anteprima

Anteprima nel JDK 25 (JEP 502). Richiede --enable-preview.

StableValue fornisce un valore inizializzato in modo lazy e immutabile con thread safety integrata. Nessun double-checked locking, nessun campo volatile, nessun blocco synchronized. La JVM può persino ottimizzare il percorso di lettura dopo l'inizializzazione.

Condividi 𝕏 🦋 in