Support d'initialisation à la demande
Bonjour,
j'aimerais bien qu'on m'explique à quoi sert le design pattern support d'initialisation à la demande (initialization on demand holder). Je n'ai pas trop compris la différence avec le simple singleton.
Singleton :
Code:
1 2 3 4 5 6
| public class Singleton
{
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {return INSTANCE;}
} |
Initialization on demand holder :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| public class Singleton
{
private Singleton() {}
private static class SingletonHolder
{
public static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance()
{
return SingletonHolder.INSTANCE;
}
} |
Je sais que les variables static sont initialisées à l'initialisation de la classe et qu'en mettant INSTANCE à l'intérieur d'une méthode, cette initialisation n'a donc pas lieu en même temps que celle de la classe mais seulement à l'appel de getInstance(). Mais ça change quoi ?
J'ai cru comprendre que c'était pour éviter que deux threads concurrents ne puissent se retrouver avec des instances différentes su Singleton, mais là j'ai pas compris comment...