單例模式
定義:
一個類隻有一個對象執行個體
例子:
皇帝要為一個單例:
代碼存在缺陷:
假如現在有兩個線程 A 和線程 B,線程 A 執行到 emperor = new Emperor(),正在申請記憶體配置設定,可能需要 0.001微秒,就在這 0.001 微秒之内,線程 B 執行到 if(emperor == null),你說這個時候這個判斷條件是 true 還是false?是 true,那然後呢?線程 B 也往下走,于是乎就在記憶體中就有兩個 Emperor的執行個體了。
修改後(本人認為這樣還不夠好):
修改後(開發的時候我比較傾向于這樣):