單例模式之靜態內部類實現

2021-09-12 07:02:20 字數 1434 閱讀 5746

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的乙個類只有乙個例項。即乙個類只有乙個物件例項。

最常用的單例模式有惡漢式和懶漢式兩種方式,除此之外還有一種通過靜態內部類實現的單例模式。

原文摘自:

1.**示例

public class singleton

static

private static class singletonhandler

}public static singleton getinstance()

public static void display()

}

public class singletontest

static class mythread extends thread

}public static void main(string args)

}

2. 執行結果及解釋

情況一(注釋 @1**,注釋 @2的**)

//執行結果 為空
解釋:外部類和內部類都沒有載入

情況二(執行 @1**)

//執行結果

this's static code block!

this's innerclass's static code block

thread running_com.singleton.singleton@4f19c297

thread running_com.singleton.singleton@4f19c297

thread running_com.singleton.singleton@4f19c297

解釋: 外部類singleton和內部類singletonhandler都載入了,因為他們的靜態**塊載入了

情況三(注釋 @1**,執行 @2的**)

//執行結果

this's static code block!

this's display!

解釋:外部類載入了,而內部類沒有載入,因為載入了類,就一定會執行靜態**塊

3. 結論

執行緒安全分析:虛擬機會保證乙個類的構造器()方法在多執行緒環境中被正確地載入,同步,如果多個執行緒同時去初始化乙個類,那麼只有乙個執行緒去執行這個類的(簡單而言: 當呼叫return singletonhandler.singleton;時會載入內部類,若在多執行緒情況下,則只有乙個執行緒去執行這個類)詳情可以參考這篇部落格:

終上實驗:內部類singletonhandler只有在getinstance()方法第一次呼叫的時候才會被載入(實現了延遲載入效果),而且其載入過程是執行緒安全的(實現執行緒安全)。內部類載入的時候只例項化了一次instance

靜態內部類實現單例模式

new b.c b b new b b.c c b.new c public class singleton public synchronized static singleton getinstance return instance public static singleton getins...

單例模式 靜態內部類

靜態內部類是乙個很好的實現單例的方式 看 package cn.liz.syn public class staticinner 私有的靜態內部類 private static class inner 公共的 獲取例項的方法 public static staticinner getinstance...

單例模式 靜態內部類

1 2 單例模式 靜態內部類3 4public class singletontest0711 1213 14 靜態內部類實現方式 15 16class singleton 2324 25 2.寫乙個靜態內部類,直接返回singleton 26 27private static class sing...