懶漢模式–延遲載入
public
class
singletonlazy3
private
volatile
static singletonlazy3 instance=null;
//保證正常初始化
public
synchronized
static singletonlazy3 getinstance()
}}return instance;
}}
*注:*解決共享變數可見性問題,需要用volatile關鍵字修飾
可見性特點:
1)對volatile變數的寫會立即重新整理到主存
2)對volatile變數的讀會讀主存中的新值
步驟2,3可能被重排序 : 流程變為1–>3–>2
這些執行緒1在執行完第三步後還沒來得及執行第二步時候,如果記憶體重新整理到了主存,
那麼執行緒2將得到乙個未初始化完成的物件。
因此,如果將object宣告為volatile的,則步驟2,3不會被重排序
private
static
volatile singleton instance;
延遲載入與單例模式
延遲載入,也較延遲例項化,延遲初始化等,主要表達的思想就是,把物件的建立延遲到使用的時候建立,而不是物件例項化的時候建立。這種方式避免了效能的浪費。當建立乙個物件的子物件開銷比較大時,而且有可能在程式中用不到這個子物件,那麼久可以考慮用延遲載入的方式來建立子物件。另外就是當乙個程式啟動時,需要建立多...
單例模式以及延遲載入
延遲載入,也叫延遲例項化,延遲初始化等,主要表達的思想就是 把物件的建立延遲到使用的時候建立,而不是物件例項化的時候建立。這種方式避免了效能的浪費。當建立乙個物件的子物件開銷比較大時,而且有可能在程式中用不到這個子物件,那麼就可以考慮用延遲載入的方式來建立子物件。另外就是當乙個程式啟動時,需要建立多...
單例模式的延遲載入
發表於 2014 10 21 23 56 04 830人閱讀 分類 隨寫 延遲載入,也叫延遲例項化,延遲初始化等,主要表達的思想就是 把物件的建立延遲到使用的時候建立,而不是物件例項化的時候建立。這種方式避免了效能的浪費。當建立乙個物件的子物件開銷比較大時,而且有可能在程式中用不到這個子物件,那麼就...