Concurrency Avanzato

Sostituisci il double-checked locking con StableValue per singleton lazy.

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

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
Inizializzazione lazy senza lock
Anteprima

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

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.

Condividi 𝕏 🦋 in