既執行緒安全又支援延遲載入的單例模式

2021-08-25 19:16:44 字數 669 閱讀 4881

// 當 jvm 載入 lazyloadedsingleton 類時,由於該類沒有 static 屬性,所以載入完成後便即可返回。只有第一次呼叫

// getinstance()方法時,jvm 才會載入 lazyholder 類,由於它包含乙個 static 屬性

// singletoninstatnce,所以會首先初始化這個變數,這樣即實現了乙個既執行緒安全又支援延遲載入的單例模式。

public class lazyloadedsingleton

private static class lazyholder

public static lazyloadedsingleton getinstance()

}

附最簡單的單例例子:

public class singleton

private static singleton instance = new singleton();

// other fields...

// 構造方法為私有

private singleton()

public static singleton getinstance()

// other methods

}

from:漫談設計模式

無鎖,執行緒安全,延遲載入的單例實現(C )

單例 singleton 是非常常見,也非常有用的設計模式,當然了,面試中也是經常會被問到的 在幾乎所有的專案中都能看到它的身影。簡而言之,單例保證了乙個自定義型別在整個程式的生命週期只被建立一次。要實現乙個簡單的單例是也很容易的 public class example public static...

如何實現無鎖的執行緒安全延遲載入單例?

單例是較為常見的設計模式,在實現延遲載入時,會出現執行緒安全的問題,我們一般採用加鎖的方式,不採用加顯式鎖的方式例如列舉 以及非延遲載入的方式之類的最終虛擬機器在執行的時候會幫我們加鎖。這個其實很好理解,我們可以看下如下的 class sim public static sim getinstanc...

單例模式的延遲載入

發表於 2014 10 21 23 56 04 830人閱讀 分類 隨寫 延遲載入,也叫延遲例項化,延遲初始化等,主要表達的思想就是 把物件的建立延遲到使用的時候建立,而不是物件例項化的時候建立。這種方式避免了效能的浪費。當建立乙個物件的子物件開銷比較大時,而且有可能在程式中用不到這個子物件,那麼就...