學習筆記 單例模式

2021-10-24 20:26:08 字數 1276 閱讀 7625

餓漢模式,即認為單例物件在單例所在的類初始化時即例項化了。

因此無論該單例物件是否真正的被呼叫,都會進行例項化。

例項化的操作放在靜態變數或者靜態**塊中。

public class hungrysingleton ;

private final static hungrysingleton hungrysingleton = new hungrysingleton();

public static hungrysingleton getinstance();

}

懶漢模式,單例物件在呼叫的時候,判斷該單例物件是否為空,若空才進行例項化。

public class lazysingleton ;

private static lazysingleton lazysingleton = null;

public static lazysingleton getinstance()

return lazysingleton.lazysingleton;

}}

懶漢模式有執行緒安全問題。如果多個執行緒同時試圖獲取單例,且單例為空,那麼可能會同時建立例項,即發生了多次的建立。

執行緒安全的懶漢模式:

public class safelazysingleton ;

private static safelazysingleton safelazysingleton = null;

public synchronized static safelazysingleton getinstance()

return safelazysingleton.safelazysingleton;

};}

有一種更優雅的方式可以解決執行緒安全問題。由於靜態內部類才不發生呼叫時也不會進行初始化,故可以用來靜態內部類的靜態變數來儲存例項。

public class innerclasslazysingleton ;

private static class innerclasslazysingletoninstance

public innerclasslazysingleton getinstance()

}

多提一句,有看到資料提到使用列舉類也是一種不錯的方法。jvm載入列舉類時使用classloader方法,該方法使用同步**塊保證執行緒安全。

public enum enumsingleton

單例模式學習筆記

單例 優點1.減少記憶體開支 2.減少效能開銷 3.寫檔案時避免資源多重占用 4.優化共享資源訪問 缺點1.自行例項化的特點導致無法擴充套件,只能修改原始碼 2.對測試不利,只有全部完成單例 才能測試 3.與單一職責原則有衝突 適用1.生成唯一序列號的環境 2.整個專案需要乙個共享訪問點 3.建立物...

單例模式學習筆記

public class student 自己造乙個 靜態方法只能訪問靜態成員變數,加靜態 為了不讓外界直接訪問修改這個值,加private private static student s new student 提供公共的訪問方式 為了保證外界能夠直接使用該方法,加靜態 public stati...

單例模式學習筆記

靜態內部類單例 反射破壞單例 序列化破壞單例 註冊式單例 threadlocal 執行緒單例 單例模式 singleton pattern 是指確保乙個類在任何情況下都絕對只有乙個例項 public class hungrysingleton public static hungrysingleto...