一、單例模式是為了控制類只有乙個例項物件,通常在以下兩種情況需要考慮使用單例模式:
1、業務邏輯的需求
2、效能的考慮
二、單例模式的機構圖:
三、單例模式的幾種實現形式:
1、形式一
public class singleton2
public static singleton2 getinstance()
return instance;
}}
2、形式二
public class singleton
public static singleton getinstance()
}
注意:對於第一種形式來說,其最大的問題是不適合於多執行緒模式。
3、形式三——改進形式一,使其在多執行緒模式下能正常執行:
public class singleton2
public synchronized static singleton2 getinstance()
return instance;
}}
加上關鍵字synchronized後,確實能保證執行緒的安全,但是存在的問題是,驗證影響效率,因為同步整個方法,會使得所有的執行緒需要順序執行,不能併發執行。
4、形式四——修正形式三,提高效率:
public class singleton2
public static singleton2 getinstance()}}
return instance;
}}
這段**的核心是:雙重檢查並加鎖。雙重檢查的作用在於不需要同步整個方法,可以併發執行程式,並且在加鎖的情況下可以保證執行緒的安全。這個地方還需要注意的關鍵字是volatile,但是該關鍵字僅僅能保證讀取的是最新指值,而無法保證原子性操作,更不能保證同步。因為在jvm中每個執行緒有自己的記憶體空間,正常情況下,該記憶體區間會儲存堆中變數的乙個副本,然後完成操作後寫回堆中,使用volatile關鍵能保證不使用執行緒的快取,而直接讀取堆中的值。從而保證每次讀取的值是最新的值,但是有可能同時兩個執行緒讀取了該變數,然後再依次修改該變數。 每天乙個設計模式之單例模式
單例模式 確保某個類只有乙個例項,並且只能自行例項化並且向系統提供這個示例。單例模式有幾個特點 單例模式在很多場景都可以使用到,比如執行緒池 快取 日誌物件 印表機或者顯示卡驅動的物件等等,這些場景下,如果有多個例項的話,可能會導致程式的行為異常 資源使用過量等問題的出現。因此,學習單例模式是很有必...
單例模式 單例模式
餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...
一天乙個設計模式 單例模式
1.餓漢模式public class sprivate static s s news public static s get 執行緒安全,載入時就初始化,根據需求來,此種用法最簡單2.懶漢模式public class sprivate static s s public static s get ...