在Java應(yīng)用中,單例對象能保證在一個JVM中,該對象只有一個實例存在。這樣的模式有幾個好處:
1、減少類的頻繁創(chuàng)建,減少使用頻繁使用new創(chuàng)建實例,減少GC壓力。
2、某些應(yīng)用場景下,使用單例模式,保證整個系統(tǒng)中只會創(chuàng)建一個類。
單例模式分兩種:餓漢模式和懶漢模式:
懶漢模式:文章來源:http://www.zghlxwxcb.cn/news/detail-861621.html
//第一次調(diào)用時才初始化,避免內(nèi)存浪費,線程安全
public class LazySingleton {
/* 持有私有靜態(tài)實例,防止被引用,此處賦值為null,目的是實現(xiàn)延遲加載 */
private static LazySingleton instance = null;
/* 私有構(gòu)造方法,防止被實例化 */
private LazySingleton() {
}
//在第一次創(chuàng)建對象的時候需要加鎖,之后就不需要了
public static LazySingleton getInstance() {
if(null == instance) {
synchronized (LazySingleton.class) {
if(null == instance) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
餓漢模式:文章來源地址http://www.zghlxwxcb.cn/news/detail-861621.html
public class HungerySingleton {
//類加載時就初始化,避免了線程同步的問題,是線程安全的
private static HungerySingleton instance = new HungerySingleton();
private HungerySingleton(){}
public static HungerySingleton getInstance(){
return instance;
}
}
到了這里,關(guān)于手寫java設(shè)計模式之單例模式,附源碼解讀的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!