Je crois que tout le monde connaît déjà le modèle Singleton, et ses méthodes de mise en œuvre sont généralement divisées en deux types suivants:
La copie de code est la suivante:
// implémentation paresseuse
classe publique singleton {
Instance singleton statique privée = null;
singleton privé () {}
Public Static NewInstance () {
if (null == instance) {
instance = new singleton ();
}
retour d'instance;
}
public void dosomething () {
// faire quelque chose ...
}
}
// style chinois affamé
classe publique singleton {
Instance singleton statique privée = new Singleton ();
singleton privé () {}
Singleton statique publique Newinstance () {
retour d'instance;
}
public void dosomething () {
// faire quelque chose ...
}
}
Dans l'utilisation du mode d'intérêt unique, le style paresseux et affamé a des scénarios d'application différents. Pour l'utiliser.
Dans les deux modes ci-dessus, si vous êtes multi-thread, il n'y aura aucun problème avec le style Hungry Man, car le JVM ne chargera la classe d'intérêt que une fois, mais le style de l'homme paresseux peut avoir le problème de créer à plusieurs reprises un seul intérêt unique objets, c'est-à-dire que le fil n'est pas sûr.
Y a-t-il donc un moyen de créer le mode d'intérêt unique de la file affamée de style homme? Il y a certainement des réponses. Dans de nombreux cas, le JVM nous a fourni un contrôle de synchronisation, comme:
a.
b.
Lorsque le JVM charge la classe, il garantira que les données sont synchronisées.
Utilisez des classes internes au niveau de la classe pour créer des instances d'objet dans cette classe interne. De cette façon, tant que vous n'utilisez pas de classes internes au niveau de la classe, vous ne créerez pas d'instances d'objets, réalisant ainsi le chargement paresseux paresseux et la sécurité des filetages.
La copie de code est la suivante:
classe publique singleton {
// classe intérieure, l'objet d'intérêt simple ne sera créé que lorsque la classe intérieure est chargée
classe statique privée singletonholder {
Instance de singleton statique publique = new Singleton ();
}
singleton privé () {}
Singleton statique publique Newinstance () {
retour singletonholder.instance;
}
public void dosomething () {
// faire quelque chose
}
}
Cela peut réaliser le modèle à prix unique en filetage.
De plus, nous pouvons également implémenter le mode d'intérêt unique via les types d'énumération, ce qui est également un moyen plus recommandé.
La mise en œuvre d'un modèle singleton à l'aide de types d'énumération est la suivante:
La copie de code est la suivante:
Singleton en énumération publique {
// définir un élément énuméré, c'est un exemple de singleton
exemple;
public void dosomething () {
// faire quelque chose ...
}
}
Ok, le mode singleton est introduit ici.