作者:fhyPayaso
鏈接:https://www.zhihu.com/question/272488727/answer/370044004
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
餓漢式:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
不管程序是否需要這個對象的實例,總是在類加載的時候就先創建好實例,理解起來就像不管一個人想不想喫東西都把喫的先買好,如同餓怕了一樣。
懶漢式:
public class Singleton {
private volatile static Singleton instance = null;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (null == instance) {
instance = new Singleton();
}
return instance;
}
}
如果一個對象使用頻率不高,佔用內存還特別大,明顯就不合適用餓漢式了,這時就需要一種懶加載的思想,當程序需要這個實例的時候纔去創建對象,就如同一個人懶的餓到不行了纔去喫東西。