單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的乙個類只有乙個例項。即乙個類只有乙個物件例項。
最常用的單例模式有惡漢式和懶漢式兩種方式,除此之外還有一種通過靜態內部類實現的單例模式。
原文摘自:
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...