Singleton-Klasse in Java - Wie verwende ich die Singleton-Klasse?

Dieser Artikel über die Singleton-Klasse in Java beschreibt die verschiedenen Möglichkeiten, wie eine Klasse zusammen mit praktischen Implementierungen zu Singleton gemacht werden kann.

In Java ist eine Singleton-Klasse eine Klasse, die jeweils nur eine Instanz haben kann. Es ist eines der fünf Creational Design-Muster in Java, das bei der mühelosen Entwicklung von hilft . In diesem Artikel werde ich Ihnen klare Einblicke geben, was eine Singleton-Klasse in Java ist und wie Sie sie erstellen können.

Im Folgenden sind die Themen aufgeführt, die ich in diesem Artikel behandeln werde:



Lass uns anfangen.

Was ist eine Singleton-Klasse in Java?

Für Laien ist eine Singleton-Klasse in Java die Klasse, die den Zugriff über jeweils eine einzelne Instanz ermöglicht. Dieses Entwurfsmuster dient dazu, die unnötige Instanziierung einer Klasse einzuschränken und sicherzustellen, dass nur eine vorhanden ist existiert zu jedem Zeitpunkt pro JVM-Instanz. Daher hat mit diesem Muster jede Klasse, die als Singleton definiert ist, nur eine einzige Instanzmit einem globalen Zugangspunkt dazu. Im Gegensatz zu normalen Klassen wird eine Singleton-Klasse am Ende des Anwendungslebenszyklus nicht zerstört.

Aber warum brauchen wir überhaupt eine Singleton-Klasse?

Durch die Einschränkung der Instanzerstellung einer Klasse wird Speicherplatz gespart, da das Objekt jetzt nicht jedes Mal erstellt wird, wenn eine neue Anforderung gestellt wird. Stattdessen wird ein einzelnes Objekt wiederholt verwendet. Dies ist der Grund, warum das Singleton-Muster in Java hauptsächlich verwendet wird und Datenbankanwendungen. Es wird hauptsächlich zum Protokollieren, Zwischenspeichern, Thread-Pooling, für Konfigurationseinstellungen und vieles mehr verwendet.

wie man Eclipse einrichtet

Ich hoffe, Sie sind mit dem Konzept der Singleton-Klasse in Java klar. Lassen Sie uns nun weiter fortfahrenSingleton Class in Java Artikel und sehen, wie sie erstellt werden.

Möglichkeiten zum Entwerfen einer Java Singleton-Klasse

Um einen Klassen-Singleton in Java zu erstellen, benötigen Sie die folgenden drei Dinge:

  1. statisches Mitglied einer Klasse
  2. privater Konstrukteur
  3. statische Fabrikmethode

Da Java es den Entwicklern ermöglicht, ihren Horizont zu erkunden, gibt es solcheEine Reihe von Möglichkeiten, wie Sie eine Singleton-Klasse entwerfen können. Unten habe ich die beliebtesten aufgelistet.

  1. Eifrige Initialisierungsmethode
  2. Lazy Initialization Method
  3. Thread-sichere Singleton-Methode
  4. Lazy Initialization mit Double Lock-Methode
  5. Lazy-Load-Methode
  6. Initialisierungsmethode für statische Blöcke

Lassen Sie uns nun nacheinander tiefer in jeden dieser Ansätze eintauchen.

1. Eifrige Initialisierungsmethode

Dies ist die einfachste Methode zum Erstellen einer Singleton-Klasse, bei der die Instanz zum Zeitpunkt des Ladens der Klasse erstellt wird. Um eine Singleton-Klasse mit dieser Methode zu erstellen, müssen Sie die folgenden Schritte ausführen:

Implementieren Sie die Prioritätswarteschlange c ++
  1. Deklarieren Sie den Konstruktor als privat.
  2. Der nächste Schritt besteht darin, ein privates Klassenmitglied für diese Singleton-Klasse zu erstellen.
  3. Jetzt müssen Sie eine Factory-Methode definieren, mit der das Objekt Ihrer Klasse zurückgegeben wird, das wir als Instanz des Klassenmitglieds erstellt haben.
  4. Sie können sogar ein statisches Mitglied als öffentlich deklarieren, wenn Sie direkt auf diese statische Instanz zugreifen möchten.

Nun wollen wir sehen, wie diese implementiert werden.

// Eager Initialisierung öffentliche Klasse EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton () private EagerSingleton () {} öffentliche statische EagerSingleton getInstance () {return INSTANCE}}

Wenn Sie den Code sehen, können Sie feststellen, dass wir jedes Mal, wenn wir ein Objekt instanziieren, das verwendenbekomme Instanz()Methode, anstatt die Klasse aufzurufen Baumeister .Aber es hat seine eigenen Nachteile. Wenn Sie diese Methode verwenden, um einen Klassen-Singleton zu erstellen, wird eine Instanz erstellt, unabhängig davon, ob die Anwendung sie verwendet oder nicht.

Lassen Sie uns also einen anderen Weg finden, um eine Singleton-Klasse in Java zu erstellen.

2. Lazy Initialization Method

Diese Methode wird als verzögerte Initialisierung bezeichnet, da die Erstellung der Klasseninstanz bis zu ihrer ersten Verwendung verschoben wird. Ich meine, mit dieser Methode wird ein Objekt nur erstellt, wenn es benötigt wird. Es hilft, unnötige Erstellung der zu vermeiden . Um eine Singleton-Klasse auf diese Weise zu entwerfen, müssen Sie die folgenden Schritte ausführen:

  1. Deklarieren Sie zunächst den Konstruktor als privat.
  2. Dann müssen Sie eine private statische Instanz für diese Klasse erstellen, diese jedoch noch nicht instanziieren.
  3. Erstellen Sie abschließend eine Factory-Methode, die zunächst überprüft, ob das Instanzmitglied null ist oder nicht. Wenn nicht, wird eine Instanz der Singleton-Klasse für Sie erstellt und zurückgegeben.

Der folgende Code zeigt, wie dies durchgeführt wird.

// Lazy Initialization öffentliche Klasse LazySingleton {private statische LazySingleton INSTANCE = null private LazySingleton () {} öffentliche statische LazySingleton getInstance () {if (INSTANCE == null) {synchronisiert (LazySingleton.class) {INSTANCE = neue LazySingleton ()}} return INSTANCE}}

3. Thread Safe Singleton Methode

Der obige Ansatz kann jedoch in den gleichzeitigen Szenarien einige Bedenken aufwerfen. Da Singleton-Muster hauptsächlich mit Multi-Threads verwendet werden und wennMehrere Threads geben gleichzeitig die if-Bedingung ein, was zu Problemen führen kann. Um dies zu vermeiden, versuchen wir, eine thread-sichere Singleton-Klasse zu erstellen, indem wir die globale Zugriffsmethode synchronisieren. Dadurch wird sichergestellt, dass zu jedem Zeitpunkt nur ein Thread diese Methode ausführt. Beziehen Sie sich auf den folgenden Code, um die Implementierung zu sehen:

// Thread Safe Singleton öffentliche Klasse ThreadSafeSingleton {private statische ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} öffentliche statische synchronisierte ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = neue ThreadSafeSingleton ()} return INSTANCE}}

Manchmal kann dieser Ansatz jedoch auch bei jeder Methode sehr umständlich werdenWenn es aufgerufen wird, muss es warten, bis die Sperre aufgehoben wird, bevor die Methode sie verwenden kann. Dies führt zu einer Verlangsamung des Prozesses und führt uns zum nächsten AnsatzLazy Initialization mit Double Lock.

4. Lazy Initialization mit Double Lock Methode

Bei diesem Ansatz synchronisieren wir die Methoden nicht. Vielmehr hüllen wir den Objekterstellungscode in einen synchronisierten Block.Sie können das sagen, indem Sie die Thread-Sperren vorher überprüfenreduziert die Anzahl der Sperrenerfassungen. Dieser Ansatz führt normalerweise zu einer Leistungssteigerung der Anwendung. Überprüfen Sie den folgenden Code, um zu sehen, wie es gemacht wird.

Was ist der Unterschied zwischen HTML und XML?
// Lazy Initialization mit Double Lock öffentliche Klasse LazyDoubleLockSingleton {private statische LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} öffentliche statische LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (LazyDoubleLockSing. null) {INSTANCE = new LazyDoubleLockSingleton ()}}} return INSTANCE}}

5. Lazy Load-Methode

Diese Methode basiert auf JSL (Java Language Specification) und entspricht dieser lädt statische Datenelemente nur dann, wenn sie benötigt werden. Wenn also Ihre Singleton-Klasse in die JVM geladen wird, wird keine Instanz erstellt. Ferner wird während der Ausführung des Programms die globale Methode in sequentieller Reihenfolge aufgerufen. Mit dieser Methode müssen Sie die statische getInstance () nicht explizit synchronisieren, um sie zu laden und zu initialisieren. Das statische Klassenmitglied wird in der richtigen Reihenfolge aufgerufen. Die restlichen gleichzeitigen Aufrufe der globalen Methode werden in derselben Reihenfolge zurückgegeben, ohne dass der Synchronisationsaufwand ausgeführt werden muss.

Unten finden Sie den Code, um dasselbe auszuführen.

// Lazy Load-Methode öffentliche Klasse LazyLoadSingleton {private LazyLoadSingleton () {} private statische Klasse SingletonClassHolder {statische endgültige Var INSTANCE = neue LazyLoadSingleton ()} öffentliche statische LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}}

6. Statische Blockinitialisierungsmethode

Diese Methode zum Erstellen einer Singleton-Klasse in Java istähnlich der eifrigen Initialisierungsmethode. Der einzige Unterschied besteht darin, dass die Instanz für diese Klasse innerhalb des statischen Blocks mit erstellt wird Funktionalität.

// Statische Blockinitialisierung öffentliche Klasse StaticBlockSingleton {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // Ausnahmebehandlung innerhalb des statischen Blocks static {try {INSTANCE = new StaticBlockSingleton ()} catch (Ausnahme e) {neue RuntimeException auslösen ('Ausnahme aufgetreten beim Erstellen einer Singleton-Klasse ')}} public static StaticBlockSingleton getInstance () {return INSTANCE}}

Dies bringt uns zum Ende dieses Artikels über die Singleton-Klasse in Java. Wenn Sie mehr über Java erfahren möchten, können Sie sich auf unsere beziehen .

Nachdem Sie verstanden haben, was eine Singleton-Klasse in Java ist, lesen Sie die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Der Java J2EE- und SOA-Schulungs- und Zertifizierungskurs von Edureka richtet sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für grundlegende als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & Spring schulen.

Hast du eine Frage an uns? Bitte erwähnen Sie dies im Kommentarbereich dieses Artikels „Singleton Class in Java“. Wir werden uns so schnell wie möglich bei Ihnen melden.