單例模式2:
單線程二(流行寫法)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 單例設計模式寫法
{
/// <summary>
/// 單例模式二:單線程二(流行寫法)
/// </summary>
public class Singleton //1:定義一個public的類
{
private static Singleton instance; //2:定義一個私有的靜態變量來保持類的實例
private Singleton() { } //3:定義一個私有的靜態構造函數,使外界不能訪問
public static Singleton Instance() //4:定義一個public靜態的方法,提供一個全局訪問點,同時也可以定義共有屬性來提供全局訪問點
{
if (instance == null) //5:如果類的實例不存在為空,則創建一個實例
{
instance = new Singleton(); //6:那么創建一個實例
}
return instance; //7:否則返回類的實例
}
/*【單線程 說明:】
上面的單例模式的實現在單線程下確實是完美的,
然而在多線程的情況下會得到多個Singleton實例,
因為在兩個線程同時運行GetInstance方法時,
此時兩個線程判斷(uniqueInstance ==null)這個條件時都返回真,
此時兩個線程就都會創建Singleton的實例,這樣就違背了我們單例模式初衷了,
既然上面的實現會運行多個線程執行,
那我們對于多線程的解決方案自然就是使GetInstance方法在同一時間只運行一個線程運行就好了,
也就是我們線程同步的問題了,具體的解決多線程的代碼請請看后面我的分享。
*/
}
}