1 Übersicht
Das Singleton-Muster hat mehrere Vorteile:
(1) Bestimmte Klassen werden häufiger erstellt. Bei einigen großen Objekten ist dies ein enormer Systemaufwand.
(2) Der neue Operator wird weggelassen, was die Häufigkeit der Systemspeichernutzung verringert und den GC-Druck verringert.
(3) Einige Klassen, beispielsweise die Kernhandelsmaschine einer Börse, steuern den Transaktionsprozess. Wenn mehrere Klassen erstellt werden können, wird das System völlig durcheinander gebracht.
2 Ausführliche Erklärung
Es gibt zwei häufig verwendete Methoden zum Schreiben des Singleton-Musters:
2.1 Hungriger chinesischer Stil
Wenn die Anwendung immer das Singleton-Muster erstellt und verwendet oder der Erstellungs- und Laufzeitdruck nicht sehr hoch ist, können Sie eine private statische Variable verwenden, um das Objekt im Voraus zu erstellen.
Kopieren Sie den Codecode wie folgt:
Paket org.scott.singleton;
/**
* @Autor Scott
* @Version 2013-11-16
* @Beschreibung
*/
öffentliche Klasse Singleton1 {
private static Singleton1 uniqueInstance = new Singleton1();
privater Singleton1(){
}
öffentliches statisches Singleton1 getInstance(){
return uniqueInstance;
}
}
Wenn die JVM in diesem Fall diese Klasse lädt, wurde das Objekt gemäß der Initialisierungssequenz erstellt. Gleichzeitig kann die JVM garantieren, dass jeder Thread diese Instanz zuerst und nur einmal erstellen muss, bevor er auf dieses Singleton-Objekt zugreift.
Natürlich können Sie auch eine statische innere Klasse verwenden, um dieselbe Funktion zu erfüllen.
Kopieren Sie den Codecode wie folgt:
Paket org.scott.singleton;
/**
* @Autor Scott
* @Version 2013-11-16
* @Beschreibung
*/
öffentliche Klasse Singleton2 {
private Singleton2() {
}
/**
* Hier wird eine interne Klasse verwendet, um den Singleton zu verwalten
* */
private statische Klasse SingletonFactory {
private static Singleton2-Instanz = new Singleton2();
}
öffentliches statisches Singleton2 getInstance() {
return SingletonFactory.instance;
}
/**
* Wenn das Objekt zur Serialisierung verwendet wird, kann garantiert werden, dass das Objekt vor und nach der Serialisierung konsistent bleibt
* */
öffentliches Objekt readResolve() {
return getInstance();
}
}
2.2 Double-Lock-Methode
Bei der „Doppelsperre“ handelt es sich, wie der Name schon sagt, um zwei Sperren. Die erste Sperre wird verwendet, um zu prüfen, ob das zu erstellende Instanzobjekt erstellt wurde. Wenn es nicht erstellt wurde, wird die zweite Sperre zur Synchronisierung verwendet.
Kopieren Sie den Codecode wie folgt:
Paket org.scott.singleton;
/**
* @Autor Scott
* @Version 2013-11-16
* @Beschreibung
*/
öffentliche Klasse Singleton3 {
private volatile static Singleton3 uniqueInstance;
privater Singleton3(){
}
öffentliches statisches Singleton3 getInstance(){
if(uniqueInstance == null){
synchronisiert(Singleton3.class){
if(uniqueInstance == null){
uniqueInstance = new Singleton3();
}
}
}
return uniqueInstance;
}
}
Wenn die Leistungsanforderungen relativ hoch sind, kann diese Methode die Erstellungszeit erheblich verkürzen. Derzeit ist diese Methode auch eine relativ häufige Methode zum Erstellen von Singletons.