Heim  >  Artikel  >  Java  >  Was ist der Unterschied zwischen dem Lazy-Man- und dem Hungrig-Man-Modus in Java?

Was ist der Unterschied zwischen dem Lazy-Man- und dem Hungrig-Man-Modus in Java?

WBOY
WBOYnach vorne
2023-05-03 20:43:051591Durchsuche

Unterschied

1. Faule Leute sind faul und initialisieren diesen Singleton erst wieder, wenn getInstance aufgerufen wird.

2. Sobald die Klasse geladen ist, initialisiert der hungrige Mann den Singleton, um sicherzustellen, dass der Singleton bereits vorhanden ist, wenn getInstance verwendet wird: #🎜🎜 #

Der Hungry-Chinese-Stil ist von Natur aus Thread-sicher und kann problemlos direkt für Multithreading verwendet werden 🎜#

Ressourcenladen und -leistung:

Der hungrige chinesische Stil instanziiert beim Erstellen der Klasse ein statisches Objekt. Unabhängig davon, ob der Singleton in Zukunft verwendet wird, wird er eine bestimmte Menge belegen Speicher, aber dementsprechend wird der erste Aufruf auch schneller sein, da seine Ressourcen bereits initialisiert sind.

Lazy-Stil, der das Laden verzögert. Das Instanzobjekt wird nur angezeigt, wenn es zum ersten Mal aufgerufen wird Es gibt noch viel zu tun, die Aufführung wird sich etwas verzögern, es wird in Zukunft wie ein hungriger Mann sein.

2, Beispiel

public class SingleTon01 {
    public static void main(String[] args) {
        GirlFriend gf1 = GirlFriend.getGf();
        GirlFriend gf2 = GirlFriend.getGf();
        //true
        System.out.println(gf1 == gf2);
 
        Cat cat1 = Cat.getCat();
        Cat cat2 = Cat.getCat();
        //true
        System.out.println(cat1 == cat2);
    }
}
 
 
/**
 * 单例模式-饿汉模式
 * 在类加载的时候就会创建对象
 */
class GirlFriend {
    public String name;
 
    private static GirlFriend gf = new GirlFriend("小红");
 
    public static GirlFriend getGf() {
        return gf;
    }
 
    /**
     * 构造器私有化,不能在本类之外new
     * @param name
     */
    private GirlFriend(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}
 
/**
 * 单例模式-懒汉模式
 * 1.构造器私有化
 * 2.提供一个static静态属性对象
 * 3.提供一个public的static方法,返回一个实例对象
 * 4.懒汉模式,只有在用户调用方法时,才会创建对象,之后再次调用,返回的是同一对象
 */
class Cat {
    private String name;
 
    private static Cat cat;
 
    private Cat(String name) {
        this.name = name;
    }
 
    public static Cat getCat() {
        if (cat == null) {
            cat = new Cat("加菲猫");
        }
        return cat;
    }
 
    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen dem Lazy-Man- und dem Hungrig-Man-Modus in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen