Valeurs stables
Initialisation paresseuse thread-safe sans volatile ni synchronized.
Comparaison de Code
✕ 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.
Pourquoi la méthode moderne gagne
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é
Support JDK
Valeurs stables
Aperçu
Aperçu dans JDK 25 (JEP 502). Nécessite --enable-preview.
Comment ça fonctionne
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.
Documentation Associée