Das Singleton -Muster ist ein Objekterstellungsmuster, das sicherstellt, dass es nur eine Instanz einer Klasse im System gibt.
In der Java -Sprache gibt es zwei Vorteile, um dies zu tun:
1. Für häufig verwendete Objekte kann die Zeit, die für das Erstellen von Objekten aufgewendet wird, weggelassen werden.
2. Aufgrund der Abnahme der Anzahl neuer Vorgänge wird die Häufigkeit der Systemspeicherverwendung verringert, wodurch der Druck von GC verringert wird und die Zeit für die GC -Pause verkürzt.
Singleton -Muster -Segmentierung:
1.
öffentliche Klasse Singleton {private Singleton () {System.out.println ("Singleton.singleton ()"); } private statische Singleton Singleton = new Singleton (); public static singleton getInstance () {return Singleton; }}Hinweis: Erstens muss die Singleton -Klasse über einen privaten Konstruktor der Zugangsniveau verfügen, um sicherzustellen, dass der Singleton nicht durch einen anderen Systemcode instanziiert wird. Zweitens muss die Variable des Singleton -Mitglieds und die GetInstance () -Methode statisch sein.
Diese Singleton -Klasse ist sehr einfach zu erstellen und sehr zuverlässig. Der einzige Nachteil ist, dass Singleton nicht latent geladen werden kann. Da der Singleton -Erstellungsprozess beispielsweise sehr langsam ist und die Mitgliedsvariable als statisch definiert ist, wird auch das Singleton -Objekt erstellt, wenn JVM die Singleton -Klasse lädt. Dann wird ein Singleton -Objekt überall überall erstellt, wo eine Singleton -Klasse verwendet wird, unabhängig davon, ob das Singleton -Objekt verwendet wird. Zum Beispiel:
öffentliche Klasse Singleton {private Singleton () {System.out.println ("Singleton.singleton ()"); } private statische Singleton Singleton = new Singleton (); public static singleton getInstance () {return Singleton; } public static void creestring () {System.out.println ("Singleton.CreateString ()"); }} 2. Um die Anrufgeschwindigkeit verwandter Funktionen zu verbessern, muss ein fauler Lastmechanismus eingeführt werden.
Paket com.luchao.Singtonle; öffentliche Klasse Lazysingleton {private lazysingleton () {System.out.println ("lazysingleton.lazysingleton ()"); } private statische Lazysingleton LazyInstance = NULL; public synchronisierte statische Lazysingleton getInstance () {if (lazyInstance == null) LazyInstance = new lazysingleton (); Rückkehr LazyInstance; }}Die statische Variable Singleton -Initialisierungszuweisung ist Null, um sicherzustellen, dass beim Start des Systems keine zusätzliche Last vorliegt. Bei der GetInstance () -Methode wird festgestellt, dass die aktuelle Instanz bereits vorhanden ist. Wenn es existiert, kehrt es zurück. Wenn es nicht existiert, wird ein Singleton erstellt. GetInstance () muss eine synchrone Methode sein, da in einer Umgebung mit mehreren Threads 1 Thread 1 ein Singleton erstellt und vor Abschluss der Zuordnung bestimmen kann, dass die Instanz null ist. Daher startet Thread 2 das Programm, um ein neues Singleton zu erstellen, was dazu führt, dass mehrere Singletons erstellt werden.
Das obige Beispiel für Singleton-Implementierung implementiert eine verzögerte Belastung, führt jedoch eine Synchronisationsmethode ein, die viel mehr Zeit in Anspruch nimmt als das erste Singleton-Programm in einer Umgebung mit mehreren Threaden.
3. Singleton Muster verwendet interne Klassen, um die Erstellung von Singletons aufrechtzuerhalten
public class staticsingleton {private staticsingleton () {System.out.println ("Staticsingleton.staticsingleton ()"); } private statische Klasse Singletonholder {private static Staticsingleton ataticsingleton = new Staticsingleton (); } public static staticsingleton getInstance () {return Singletonholder.aticsinleton; }}Wenn staticsingleton geladen wird, wird die innere Klasse nicht instanziiert, um sicherzustellen, dass die Singleton -Klasse nicht initialisiert wird, wenn die Statik -Singleton -Klasse in JVM geladen wird, und der Singletonholder geladen wird, wenn die GetInstance () -Methode aufgerufen wird, wodurch die Instanz initialisiert wird. Es wird auch verwendet, um Instanzen zu erstellen, wenn die Klasse geladen wird, sodass natürlich fadenfreundlich ist.
Die Verwendung interner Klassen zum Vervollständigen des Einzel-Profit-Modus kann nicht nur eine verzögerte Belastung erzielen, sondern auch synchrone Schlüsselwörter verwenden. Es ist ein relativ vollständiger Ansatz.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein.