顧名思議,單例,單一例項,就是在程式執行期間確保某乙個類只有乙個例項,一般稱其為singleton類。
既然只能有乙個例項,那麼肯定不能讓程式執行期間隨時都能new出乙個例項,所以將建構函式私有化,通過在類內部自行例項化乙個物件,並且通過getinstance()方法,向外部提供這個例項。
public class singleton ;
//通過此方法獲取唯一例項
public static singleton getsingleton()
//類中其他方法
public static void dosomething()
}
「懶漢式」單例,在最開始不例項化物件,到後期執行需要時再例項化並返回,顯得很「懶」
為了實現懶漢式的執行緒安全,需要加鎖
public class singleton ;
//通過此方法獲取唯一例項
//如果是單執行緒,不需要加鎖,多執行緒則需要
public static synchronized singleton getsingleton()
return singleton;
}//類中其他方法
public static void dosomething()
}
為什麼需要加鎖?
在高併發的情況下,假如執行緒a執行到了singleton = new singleton(),但是因為物件還在初始化,所以還沒有獲取物件,在此期間,執行緒b執行到singleton == null,此時判定為真,那麼執行緒b也會去例項化物件,造成記憶體**現了兩個例項,所以多執行緒情況下需要加鎖。
1. 減少記憶體開支
2.減少系統效能開銷
3.避免對資源的多重占用
4.優化和資源共享訪問
1.一般沒有介面,擴充套件困難
2.對測試不友好,在並行開發中,如果單例模式沒有完成,不能進行測試
3.與單一職責原則衝突,單例模式「單例」和業務邏輯融合在了乙個類中
1.要求生成唯一序列號的環境
2.整個專案共享的訪問點或者資料
3.需要定義大量的靜態變數和靜態方法的環境,此時也可以直接宣告為static
八年始終如一,瑞成工業為中國工業發展賦能
乙個國家的發展,離不開堅實的工業產業的支撐。瑞成工業八年來始終堅持發展進步,為中國工業產業的進步注入堅實力量。沐浴著時代的春風,中國工業產業保持持續進步,在全球範圍內做大做強 做優做精。瑞成工業在這樣的環境下以高要求 高標準嚴格約束自身,為全方位推動中國工業產業高質量的發展 進步奠定堅實基礎。用旗下...
單例模式總結
三種實現單例模式的對比 1.volatile關鍵字不但可以防止指令重排,也可以保證執行緒訪問的變數值是 主記憶體中的最新值 有關volatile的詳細原理,我在以後的漫畫中會專門講解。2.使用列舉實現的單例模式,不但可以防止利用反射強行構建單例物件 可以而且在列舉類物件被 反序列化 的時候,保證反序...
單例模式總結
單例模式的使用有乙個必要的條件,在乙個系統要求乙個類只有乙個例項時才應當使用單例模式。在懶漢式單例的時候為什麼要進行執行緒的控制呢?package 單例模式.懶漢模式 public class lazysingleton synchronized public lazysingleton getin...