Initialisation paresseuse sans verrous
Remplace le double-checked locking par StableValue pour les singletons paresseux.
Comparaison de Code
✕ 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.
Pourquoi la méthode moderne gagne
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é
Support JDK
Initialisation paresseuse sans verrous
Aperçu
Aperçu dans JDK 25 (JEP 502, StableValue). Nécessite --enable-preview.
Comment ça fonctionne
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.
Documentation Associée