最新最準確內容建議直接訪問原文:單例模式java
主要介紹單例模式的標準寫法、注意事項、做用、測試,以Java語言爲例,下面代碼是目前見過最好的寫法:android
public class Singleton { private static volatile Singleton instance = null; // private constructor suppresses private Singleton(){ } public static Singleton getInstance() { // if already inited, no need to get lock everytime if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
一、須要注意的點算法
其中須要注意的點主要有三點
(1) 私有化構造函數
(2) 定義靜態的Singleton instance對象和getInstance()方法
(3) getInstance()方法中須要使用同步鎖synchronized (Singleton.class)防止多線程同時進入形成instance被屢次實例化
能夠看到上面在synchronized (Singleton.class)外又添加了一層if,這是爲了在instance已經實例化後下次進入沒必要執行synchronized (Singleton.class)獲取對象鎖,從而提升性能。緩存
Ps: 也有實現使用的是private static Object obj = new Object();加上synchronized(obj),實際沒有必要多建立一個對象。synchronized(X.class) is used to make sure that there is exactly one Thread in the block.性能優化
二、單例的做用
單例主要有兩個做用
(1) 保持程序運行過程當中該類始終只存在一個示例
(2) 對於new性能消耗較大的類,只實例化一次能夠提升性能網絡
三、單例模式測試多線程
單例模式能夠使用多線程併發進行測試,代碼以下:併發
你可能還感興趣:ide