天天看點

設計模式3 - 單例模式【Singleton Pattern】

單例模式

定義:

一個類隻有一個對象執行個體

例子:

設計模式3 - 單例模式【Singleton Pattern】

皇帝要為一個單例:

代碼存在缺陷:

假如現在有兩個線程 A 和線程 B,線程 A 執行到 emperor = new Emperor(),正在申請記憶體配置設定,可能需要 0.001微秒,就在這 0.001 微秒之内,線程 B 執行到 if(emperor == null),你說這個時候這個判斷條件是 true 還是false?是 true,那然後呢?線程 B 也往下走,于是乎就在記憶體中就有兩個 Emperor的執行個體了。

修改後(本人認為這樣還不夠好):

修改後(開發的時候我比較傾向于這樣):