餓漢式2種(靜態常量餓漢式、靜態**塊餓漢式)懶漢式3種(執行緒不安全懶漢式、執行緒安全懶漢式、同步**塊懶漢式)
還有3種(雙重檢查、靜態內部類、列舉方式)
// 1.靜態常量餓漢式
public class singleton
public static singleton getinstance()
}優點:實現較為簡單,在類載入時就完成了例項化,避免了多執行緒同步問題
缺點:在類載入時就完成了例項化(使類載入的情況有很多種,不一定是呼叫getinstance()方法使類進行載入的),沒有達到懶載入的效果。如果程式從始至終未用到該例項,則造成了空間浪費
//2.靜態**塊餓漢式
public class singletonprivate singleton(){}
public static singleton getinstance()
}
優缺點:同靜態常量餓漢式
//3.執行緒不安全懶漢式
public class singletonprivate static singleton singleton;
public static singleton getinstance()
return singleton;
}}
//4.執行緒安全懶漢式
public class singletonprivate static singleton singleton;
public static synchronized singleton getinstance()
return singleton;}}
優點:起到懶載入的效果,執行緒安全
//5.同步**塊懶漢式
public class singletonprivate static singleton singleton;
public static singleton getinstance()
}return singleton;
}}
優點:懶載入缺點:不適合多執行緒環境,可能因多個執行緒同時到達if(singleton == null)而產生多個例項,表面**看執行緒安全實際執行緒不安全
//6.雙重檢查(推薦使用)
public class singletonprivate static volatile singleton singleton;
public static singleton getinstance()}}
return singleton;}}
優點:解決了同步**塊方式的執行緒安全問題
//7.靜態內部類(推薦使用)
靜態內部類的特點:
1.當外部類被裝載時,靜態內部類不會被立即裝載
2.當呼叫getinstance()時靜態內部類只被裝載一次
public class singletonprivate static class singletoninstance
public static singleton getinstance()
}優點:當外部類singleton被裝載時,靜態內部類不會立即被裝載,而是在需要時才被裝載,也就是呼叫getinstance()時才被裝載,達到了懶載入的效果,這種方式採用了類載入機制來保證初始化例項時只有乙個執行緒,所以在這裡jvm
//8.列舉方式(推薦使用)
enum singleton}優點:執行緒安全,效率高,還可防止反序列化重新建立新的物件
單例模式的應用場景:
需要被頻繁建立或銷毀的物件
建立物件時耗時或者耗費資源過多(即重量級物件),但又經常使用的物件
頻繁訪問的資料庫或檔案
設計模式 8種方式實現單例模式
1 餓漢式的兩種寫法 餓漢式的特點 在獲取單例物件之前物件就已經建立完成了。package com.juc程式設計.volatile0 public class singleeh public static singleeh getsingleeh 2.靜態 塊 private static fin...
7種方式實現單例模式
單例模式,即是整個類有且只有乙個類例項,通過這個唯一的例項為全域性提供服務。單例類的構造方法為私有的,通過乙個暴露給外界的獲取例項方法來呼叫私有構造方法,保證例項的唯一性。因為餓漢式單例在類載入時就初始化了唯一的例項 且只會初始化一次,所以,該例項是唯一的,即 執行緒安全的 因此,如果我們想要為例項...
單例模式(5種實現方式)
1.餓漢式 不支援併發 此模式只能執行在單執行緒下,且類在載入時就已經建立好了例項,不管需不需要用。package com.lys 餓漢式 public class singleton1 private static singleton1 instance new singleton1 public...