Das Java-Singleton-Muster ist ein weit verbreitetes Entwurfsmuster, das garantiert, dass eine Klasse nur eine Instanz hat und einen globalen Zugriffspunkt darauf bereitstellt. Stellen Sie sich das so vor, als würde ein einzelner Manager ein Team beaufsichtigen – es gibt nur einen, und jeder interagiert über diesen einzigen Ansprechpartner. In diesem Artikel werden die Implementierung des Musters und verschiedene Ansätze in Java erläutert.
Warum das Singleton-Muster verwenden?
- Garantierte Einzelinstanz: Stellt sicher, dass in Ihrer Anwendung nur eine Instanz einer Klasse vorhanden ist. Dies ist von entscheidender Bedeutung für die Verwaltung von Ressourcen wie Datenbankverbindungen (Vermeidung übermäßiger Verbindungserstellung und -zerstörung) oder Druckerspoolern (Verhinderung von Konflikten zwischen Benutzern).
- Globaler Zugangspunkt: Bietet einen einzelnen, leicht verfügbaren Zugangspunkt zur Instanz.
- Ressourcenverwaltung: Verwaltet effizient gemeinsam genutzte Ressourcen wie Konfigurationen, Protokollierungssysteme oder Thread-Pools.
So implementieren Sie das Singleton-Muster in Java
Es gibt mehrere Ansätze, jeder mit seinen eigenen Kompromissen:
1. Lazy Initialization: Erstellt die Instanz nur, wenn sie zum ersten Mal benötigt wird.
import java.io.Serializable; public class LazySingleton implements Serializable { private static LazySingleton instance; private LazySingleton() { if (instance != null) { throw new IllegalStateException("Instance already created"); } } public static LazySingleton getInstance() { if (instance == null) { instance = new LazySingleton(); } return instance; } private Object readResolve() { return getInstance(); } }
2. Thread-sicherer Singleton: Verwendet synchronized
, um Thread-Sicherheit während der Instanzerstellung zu gewährleisten.
import java.io.*; public class ThreadSafeSingleton implements Serializable { private static final long serialVersionUID = 1L; private static ThreadSafeSingleton instance; private ThreadSafeSingleton() { if (instance != null) { throw new IllegalStateException("Instance already created"); } } public static synchronized ThreadSafeSingleton getInstance() { if (instance == null) { instance = new ThreadSafeSingleton(); } return instance; } private Object readResolve() { return getInstance(); } }
3. Doppelt überprüfte Sperre: Optimiert die Thread-Sicherheit durch Minimierung des Synchronisierungsaufwands.
import java.io.*; public class DoubleCheckedLockingSingleton implements Serializable { private static final long serialVersionUID = 1L; private static volatile DoubleCheckedLockingSingleton instance; private DoubleCheckedLockingSingleton() { if (instance != null) { throw new IllegalStateException("Instance already created"); } } public static DoubleCheckedLockingSingleton getInstance() { if (instance == null) { synchronized (DoubleCheckedLockingSingleton.class) { if (instance == null) { instance = new DoubleCheckedLockingSingleton(); } } } return instance; } private Object readResolve() { return getInstance(); } }
4. Bill Pugh Singleton (empfohlen):Verwendet eine statische innere Klasse, um verzögerte Initialisierung und Thread-Sicherheit zu gewährleisten.
import java.io.*; public class BillPughSingleton implements Serializable { private static final long serialVersionUID = 1L; private BillPughSingleton() { if (SingletonHelper.INSTANCE != null) { throw new IllegalStateException("Instance already created"); } } private static class SingletonHelper { private static final BillPughSingleton INSTANCE = new BillPughSingleton(); } public static BillPughSingleton getInstance() { return SingletonHelper.INSTANCE; } private Object readResolve() { return getInstance(); } }
5. Enum Singleton (moderner Ansatz): Nutzt die inhärente Thread-Sicherheit und Serialisierungsverarbeitung von Enums. Dies wird aufgrund seiner Einfachheit und Robustheit oft als der beste Ansatz angesehen.
public enum EnumSingleton { INSTANCE; public void showMessage() { System.out.println("Hello from Enum Singleton!"); } }
Zusammenfassung der Singleton-Implementierungen
- Verzögerte Initialisierung: Einfach, erfordert jedoch zusätzliche Handhabung für Thread-Sicherheit und Serialisierung.
- Thread-sicherer Singleton: Thread-sicher, kann jedoch aufgrund der Synchronisierung zu Leistungseinbußen führen.
- Doppelt überprüfte Sperre: Verbessert die Leistung gegenüber dem einfachen Thread-sicheren Ansatz.
- Bill Pugh Singleton: Elegant und effizient, oft wegen seiner Einfachheit und Thread-Sicherheit bevorzugt.
- Enum Singleton: Die prägnanteste und robusteste Lösung, die die integrierten Funktionen von Java nutzt. Generell empfohlen für die moderne Java-Entwicklung.
Das obige ist der detaillierte Inhalt vonDas Singleton-Muster in Java verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

JavaremainsAgoodlanguageduetoitscontinuousevolutionandrobustEcosystem.1) LambdaexpressionenhanceCodereadabilityAnableFunctionalprogramm.

Javaisgratduetoitsplattformindependenz, robutepoopsupport, extensinstivibrary und Strongcommunity.1) PlattformindependenzenviajvMallowsCodetorunonvariousPlatforms.2) oopfeatures Likecapsulation, Erbe und PolymorphoseMendeularsCalablcode.3)

Die fünf Hauptmerkmale von Java sind Polymorphismus, Lambda -Ausdrücke, Streamsapi, Generika und Ausnahmebehandlung. 1. Polymorphismus ermöglicht es, Objekte verschiedener Klassen als Objekte gemeinsamer Basisklassen zu verwenden. 2. Lambda -Ausdrücke machen den Code prägnanter, insbesondere für die Handhabung von Sammlungen und Streams. 3.Streamsapi verarbeitet effizient große Datensätze und unterstützt deklarative Vorgänge. 4. Generika bieten Typensicherheit und Wiederverwendbarkeit, und während der Zusammenstellung werden Typfehler aufgenommen. 5. Ausnahmebehandlung hilft, fehlerfrei zu handhaben und zuverlässige Software zu schreiben.

Java'StopfeaturessinifificteNtationHancePSperformanceandScalability.1) Objektorientierte Principles LikepolymorphismenableFlexiBleandsCalableCode.2) garbagebackecollectionAutomatomatomatomatomatomatomatomatomatomatomatomatomatomatomatomatomatesMorymanagementbutcancauselatissues.3) Die

Zu den Kernkomponenten des JVM gehören Classloader, RunTimedataara und ExecleateEngine. 1) Classloader ist für das Laden, Verknüpfen und Initialisieren von Klassen und Schnittstellen verantwortlich. 2) Runtimedataara enthält Methoden-, Haufen-, Stapel-, PCregister- und Nativemethodstacks. 3) ExecXesionEngine besteht aus Dolmetscher, Jitcompiler und GarbagebyCollector, der für die Ausführung und Optimierung von Bytecode verantwortlich ist.

Java'sSafetyandSecurityarebolsteredby: 1) StrongyPing, die sich mit dem Verhältnis von BrevventType-Related-Related-Relating-Related-Relating-Robuations-Robust-Verhandlung, Enguringgrading, Ensuringgrealing und 4) Robustxceptionhandling, Ensuringgregradinggrocking und 4) Robustxceptionhandling, Enguringgradegry,

JavaoffersseveralKeyFeaturesthatenhanceCodingskills: 1) Objektorientierte ProgrammingallowsModelingreal-Welt, beispielhaft veranschaulicht

ThejvmisacrucialComponentThatrunsjavacodeBytranslatingIntomachine-spezifische Struktur, ImpactingPerformance, Sicherheit und Portabilität.1) TheClassloaderloads, Links und Intropionsclasss.2) Die ExecleateExexexexexexexexecutesytecodintomatinstructions.3) Memo


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.
