Der erste (fauler Mann, der Thread ist nicht sicher):
Öffentliche Klasse Singleton {private statische Singleton -Instanz;
Diese Art des Schreibens ist offensichtlich, aber das tödliche ist, dass es nicht normal auf Multi -Threaded funktionieren kann.
Der zweite Typ (fauler Mann, Fadensicherheit):
Öffentliche Klasse Singleton {private statische Singlet -Instanz;
Diese Art des Schreibens kann in Multi -Thread gut funktionieren, und es scheint, dass es auch eine gute faule Belastung hat.
Dritter (hungriger Mann):
Öffentliche Klasse Singleton {private statische Singlet Instance = New Singlet ();
Diese Methode basiert auf dem Klassenmechanismus, um Synchronisationsprobleme mit mehreren Threads zu vermeiden. Laden.
Der vierte Typ (hungriger Mann, Variante):
Öffentliche Klasse Singleton {private Singlet Instance = null;
Auf der Oberfläche sieht es ganz anders aus.
Fünfter (statische interne Klasse):
Öffentliche Klasse Singleton {private statische Klasse Singletter {private statische Finale Singlet Instance = new Singleton ();} private Singlet () {} public static l Singleton GetInstance () {return Singletonholder.instance;}}
Diese Methode verwendet auch den Mechanismus des Klassenloders, um sicherzustellen, dass es bei der Initialisierung nur einen Thread gibt. Beim Laden wird die Instanz instanziiert (hat den faulen Belastungseffekt nicht erreicht), und diese Methode ist, dass die Singleton -Klasse geladen wird und die Instanz möglicherweise nicht initialisiert wird. Da die Singletonholders -Klasse nicht aktiv verwendet wird, wird die Singletonholder -Klasse nur angezeigt, wenn sie die GetInstance -Methode so aufruft, dass die Instanz sofort instanziiert wird. Stellen Sie sich vor, wenn die institutionalisierte Instanz Ressourcen konsumiert, möchte ich, dass er das Laden verzögert. Um es zu verwenden, um als Ergebnis verwendet zu werden. Zu diesem Zeitpunkt ist diese Methode im Vergleich zum dritten und vierten Weg sehr vernünftig.
Der sechste Typ (Aufzählung):
public enum singleton {Instance;
Diese Methode ist ein effektiver Java -Autor Josh Block.
Siebter (Doppelschule):
Öffentliche Klasse Singleton {private volatile statische Singleton Singleton; ;}}} Return Singleton;}}
Dies handelt
Nach JDK1.5 kann das Doppelinspektionsschloss normal den einzigartigen Effekt erzielen.
Zusammenfassen
Es gibt zwei Fragen, auf die man sich beachten muss:
1. Wenn das Einzelfall von verschiedenen Arten von Ladern geladen wird, kann es mehrere Einzel -Case -Instanzen geben. Angenommen, es handelt sich um einen Remote -Zugriff.
2. Wenn Singleton Java.io.Serializable -Schnittstelle implementiert, können Instanzen dieser Klasse serialisiert und wiederhergestellt werden. Wenn Sie ein Objekt einer Singles -Klasse serialisieren und dann mehrere Objekte wiederherstellen, haben Sie mehrere Beispiele für eine Einzelbezugsklasse.
Der Weg zur Reparatur der ersten Frage ist:
Private statische Klasse getClass (String ClassName)
Löst classNotFoundException {aus
Classloader classLader = thread.currentThread ().
if (classloader == null)
classloader = Singleton.class.getClassloader ();
Return (classloader.loadClass (className));
}
}
Die Methode zur Reparatur der zweiten Frage ist
Öffentliche Klasse Singletton implementiert java.io.serializable {
öffentliches statisches Singleton Instance = new Singleton ();
Geschützter Singleton () {
}
Private Object ReadResolve () {
Rückkehrinstanz;
}
}
Für mich bevorzuge ich den dritten und fünften Weg, einfach und leicht zu verstehen, und erkennen die Sicherheit der Fäden in der JVM -Ebene (wenn es sich nicht um eine Laderumgebung mit mehreren Klassen handelt), werde ich im Allgemeinen die dritte Art und Weise verwenden, wie die Methode wird. Verwenden Sie die fünfte Methode nur dann, wenn der faule Ladungseffekt eindeutig erreicht ist. Verwenden Sie niemals die ersten und zweiten Methoden.
===================================================== ===============
Superheizai -Klassenkameraden sind sehr gut zusammengefasst:
Im Allgemeinen ist der erste Beispiel kein einziger Beispiel, der vierte und dritte Typ ist eins. Daher sind die allgemeinen Singles fünf Möglichkeiten des Schreibens. Faule Männer, böse Männer, Doppelschulenschlösser, Aufzählung und statische innere Klassen.
Ich freue mich sehr, einen solchen Leser zu haben und sie zusammen zu ermutigen.