Valori stabili
Inizializzazione lazy thread-safe senza volatile o synchronized.
Confronto Codice
✕ 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.
Perché vince l'approccio moderno
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
Supporto JDK
Valori stabili
Anteprima
Anteprima nel JDK 25 (JEP 502). Richiede --enable-preview.
Come funziona
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.
Documentazione Correlata