確保乙個類只有乙個例項被建立,雖然看上去簡單,但是裡面卻有很多的陷阱。
單例模式的類圖:
經典的單例模式:
public class singleton private static singleton singleton=null; public static singleton getinstance() return singleton; } }
這個也可以稱為:懶漢模式,只有在首次建立的時候,才去例項化。但是這種方式在多執行緒下是有問題的,第乙個執行緒執行到singleton=new singleton();時,還沒有例項化,singleton==null,此時第二個執行緒執行if (singleton==null),也進入了if裡面,這樣就會例項化兩個執行緒。下面的例子就是模擬了兩個執行緒同時訪問:
public class singleton private static singleton singleton=null; public static singleton getinstance() catch (interruptedexception e) singleton=new singleton(); } return singleton; } public static void main(string args) } class singletonthread extends thread }
執行結果:
singleton@ca0b6
singleton@10b30a7
所以要進行執行緒安全的處理:
public static synchronized singleton getinstance() catch (interruptedexception e) singleton=new singleton(); } return singleton; }
這樣就能保證每次就只有乙個執行緒可以進入,例項化執行緒。執行結果:
singleton@10b30a7
singleton@10b30a7
還有一種方式是:飽漢模式:
//例項化放在靜態**塊裡可提高程式的執行效率,但也可能更占用空間 private final static singleton singleton=new singleton(); public singleton getinstance()
這種不會出現執行緒安全問題。
設計模式Singleton學習
確保乙個類只有乙個例項被建立,雖然看上去簡單,但是裡面卻有很多的陷阱。單例模式的類圖 經典的單例模式 這個也可以稱為 懶漢模式,只有在首次建立的時候,才去例項化。但是這種方式在多執行緒下是有問題的,第乙個執行緒執行到singleton new singleton 時,還沒有例項化,singleton...
設計模式Singleton
設計模式singleton 引言 相信大多數拜讀過 gang of four erich gamma,richard helm,ralph johnson,john vlissides 的經典之作 design pattern 的同僚們,對這本書一定推崇有加。曾有人這麼宣告 只有在讀過 design...
設計模式 Singleton
關於singleton模式的理解與思考 1 singleton模式最常用的解決方案是什麼?2 singleton如何保證執行緒安全性?3 singleton物件的析構如何完成?singleton模式用來保證乙個程序中只有乙個某型別的實體,也就是說程序中的多執行緒可能共享該實體。共享該實體是指共享該實...