###單例模式 ####單例模式特色 保證一個類只有一個實例,而且提供一個訪問該實例的全局訪問點編程
windows中的任務管理器windows
操做系統的文件系統,一個操做系統只能有一個文件系統安全
servlet編程中,每一個servlet也是單例併發
SpringMVC中,控制對象也是單例操作系統
Spring中的bean線程
####單例模式分類 #####餓漢式 特色:減小系統開銷code
public class SingletonDemo { //類初始化的時候當即加載(沒有延時加載的優點),因爲加載類的時候天熱的線程安全 private static final SingletonDemo singleDemo = new SingletonDemo(); //私有化構造器 private SingletonDemo() { } //方法沒有同步,調用效率高 public static SingletonDemo getInstance(){ return singleDemo; } }
#####懶漢式 ######懶漢式普通實現 特色:真正用的時候加載,資源的利用率高,可是每次調用的時候須要同步,併發下效率低對象
public class SingletonDemo1 { //調用的時候加載 private static SingletonDemo1 instance = null; //私有化構造器 private SingletonDemo1() { } //方法同步,調用效率低 public static synchronized SingletonDemo1 getInstance() { if (instance == null) { instance = new SingletonDemo1(); } return instance; } }
######餓漢式靜態內部類實現 特色:內存
外部沒有static屬性不會餓漢式那樣當即加載對象資源
真正調用getInstance()時,纔會加載靜態內部類.類加載時是線程安全的,static final保證內存中實例惟一
兼具併發高效和延時加載的優點
public class SingletonDemo2 { private static class singletonClass { private static final SingletonDemo2 instance = new SingletonDemo2(); } public static SingletonDemo2 getInstance() { return singletonClass.instance; } private SingletonDemo2() { } }