Verrouillage doublement vérifié : Cette approche est une version thread-safe de l'approche d'initialisation paresseuse, elle utilise un mécanisme de verrouillage à double vérification pour garantir qu'une seule instance de la classe est créée.
Elle ne synchronise que la première fois lorsque la classe est instanciée, et elle est également sûre.
public class Singleton {
private volatile static Singleton INSTANCE;
private Singleton() {}
public static Singleton getInstance() {
if (INSTANCE == null) {
synchronized(Singleton.class) {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
un peu de lecture,
https://stackoverflow.com/a/11165926
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
J'avais connaissance de cette solution mais sans que la variable d'instance soit "volatile". Par ailleurs dans le post de lecture que tu proposes ce n'est pas la plus optimisée en terme d'utilisation de ressource.
Si on revient à ma préoccupation initiale qui était celle de savoir pourquoi la création de la variable d'instance à l'initialisation de la classe était thread safe , l'explication que j'ai trouvé est que c'est le classloader qui s'en charge (et pas un thread) de façon séquentiel. La leçon que j'en tire est que c'est la méthode de création d'un singleton avec le moins de overhead possible.
A plus.
- Edité par jeansimplicepat 30 janvier 2023 à 13:18:27
Singleton pattern - thread safe
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)