Inizializzazione lazy senza lock
Sostituisci il double-checked locking con StableValue per singleton lazy.
Confronto Codice
✕ 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();
}
}
Vedi un problema con questo codice? Faccelo sapere.
Perché vince l'approccio moderno
Nessun boilerplate
Nessun volatile, synchronized o doppio controllo null.
Letture più veloci
La JVM può piegare le costanti dopo l'inizializzazione.
Provabilmente corretto
Nessun bug di ordinamento sottile — la JVM lo gestisce.
Approccio Vecchio
synchronized + volatile
Approccio Moderno
StableValue
Dal JDK
25
Difficoltà
Avanzato
Supporto JDK
Inizializzazione lazy senza lock
Anteprima
Anteprima nel JDK 25 (JEP 502, StableValue). Richiede --enable-preview.
Come funziona
StableValue incapsula il pattern di inizializzazione lazy con la corretta thread safety. La JVM può ottimizzare il percorso di lettura dopo l'inizializzazione, rendendolo potenzialmente più veloce delle letture volatile.
Documentazione Correlata