Concurrency Avancé

Remplace le double-checked locking par StableValue pour les singletons paresseux.

✕ 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();
    }
}
Un problème avec ce code ? Dites-le nous.
🧹

Sans code répétitif

Sans volatile, synchronized ni double-null-check.

Lectures plus rapides

La JVM peut plier les constantes après l'initialisation.

Correction démontrable

Sans erreurs subtiles d'ordonnancement — la JVM s'en charge.

Ancienne Approche
synchronized + volatile
Approche Moderne
StableValue
Depuis JDK
25
Difficulté
Avancé
Initialisation paresseuse sans verrous
Aperçu

Aperçu dans JDK 25 (JEP 502, StableValue). Nécessite --enable-preview.

StableValue encapsule le pattern d'initialisation paresseuse avec une sécurité thread correcte. La JVM peut optimiser le chemin de lecture après l'initialisation, le rendant potentiellement plus rapide que les lectures volatile.