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.

Partager 𝕏 🦋 in