Concurrency Avancé

Initialisation paresseuse thread-safe sans volatile ni synchronized.

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

Zéro code répétitif

Sans volatile, synchronized ni vérifications de null.

Optimisé par la JVM

La JVM peut plier la valeur après l'initialisation.

🛡️

Exécution unique garantie

Le fournisseur s'exécute exactement une fois, même sous contention.

Ancienne Approche
Double-Checked Locking
Approche Moderne
StableValue
Depuis JDK
25
Difficulté
Avancé
Valeurs stables
Aperçu

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

StableValue fournit une valeur initialisée paresseusement et immutable avec une sécurité thread intégrée. Sans double-checked locking, sans champs volatile, sans blocs synchronized. La JVM peut même optimiser le chemin de lecture après l'initialisation.

Partager 𝕏 🦋 in