Heim > Java > javaLernprogramm > Implementierungsmethoden und allgemeine Schreibmethoden des Java-Singleton-Musters

Implementierungsmethoden und allgemeine Schreibmethoden des Java-Singleton-Musters

PHPz
Freigeben: 2023-04-27 16:19:07
nach vorne
1479 Leute haben es durchsucht

1. Der Hungry-Modus wird auch als Vorlademodus bezeichnet. Er erstellt und initialisiert direkt ein Singleton-Objekt, sodass es keine Thread-Sicherheitsprobleme gibt. Es basiert auf dem ClassLoader-Klassenmechanismus und wird nur einmal geladen, wenn das Programm startet, sodass kein Thread-Sicherheitsproblem besteht.

Der Implementierungscode lautet wie folgt:

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {}
    // 2.通过私有变量保存单例对象
    private static Singleton instance = new Singleton();
    // 3.提供公共获取单例对象的方法
    public static Singleton getInstance() {
        return instance;
    }
}
Nach dem Login kopieren

Vorteile: Einfache Implementierung, keine Thread-Sicherheitsprobleme.

Nachteil: Das Objekt wird beim Laden der Klasse erstellt. Wenn es nach der Erstellung nicht verwendet wird, führt dies zu einer Verschwendung von Ressourcen. 2. Der Lazy-Modus und der Hungrig-Modus sind genau das Gegenteil. Der sogenannte Lazy-Loading-Modus bedeutet, dass er nur bei der ersten Verwendung initialisiert wird

Der Implementierungscode lautet wie folgt:

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {}
    // 2.通过私有变量保存单例对象
    private static volatile Singleton instance = null;
    // 3.提供公共获取单例对象的方法
    public static Singleton getInstance() {
        if (instance == null) { // 第一次效验
            synchronized (Singleton.class) {
                if (instance == null) { // 第二次效验
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
Nach dem Login kopieren

Der Lazy-Modus verwendet doppelte Validierungssperren und Volatilität, um die Thread-Sicherheit zu gewährleisten. Wie aus dem obigen Code ersichtlich ist, ist es egal, ob es sich um den Hungrig-Modus oder den Lazy-Modus handelt Implementierung Die Schritte sind die gleichen:

Erstellen Sie einen privaten Konstruktor, um zu verhindern, dass andere Aufrufe neue Objekte direkt verwenden, sodass das erstellte Objekt kein Singleton-Objekt ist.

Erstellen Sie eine private Variable, um das Singleton-Objekt zu speichern.
  • Stellen Sie eine öffentliche Methode bereit, um ein Singleton-Objekt zurückzugeben.
  • Im Vergleich zum Hungrigen Modus verursacht der Lazy Modus keine Ressourcenverschwendung, aber die Schreibmethode ist komplizierter.
  • 3. Statische innere Klasse

  • Statische innere Klasse kann sowohl Thread-Sicherheit als auch verzögertes Laden gewährleisten. Sie lädt und initialisiert die interne statische Klasse nur über den ClassLoader-Mechanismus, sodass es sich um einen Thread handelt Der Implementierungscode dieses Modus lautet wie folgt:
public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {
    }
    // 2.静态内部类
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    // 3.提供公共获取单例对象的方法
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
Nach dem Login kopieren

4. Enumeration

Die Enumeration wird von der Java Virtual Machine nur geladen und initialisiert, wenn sie zum ersten Mal verwendet wird, daher ist sie auch Thread-sicher und Lazy Beim Laden

lautet der Implementierungscode wie folgt:

public enum  EnumSingleton {
    INSTANCE;
    public EnumSingleton getInstance(){
        return INSTANCE;
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonImplementierungsmethoden und allgemeine Schreibmethoden des Java-Singleton-Musters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage