public class Singleton { private static Singleton singleton; private static readonly object obj = new object(); private Singleton() { } public static Singleton GetInstance() { if (singleton == null) { lock (obj) { if (singleton == null) singleton = new Singleton(); } } return singleton; } }
单例模式顾名思义只允许有一个实例。
构造函数一定要是私有的.保证外部不能通过new来生成新的实例。
并且暴露出来一个CreateInstance入口去给外部调用创建实例,该方法一定要是public的,并且static。
双重校验锁的目的:线程安全
第一重校验:效率问题,如果不要这重校验,每个进程进来都会被阻塞,影响效率。
加锁:阻塞
第二重校验:保证只能创建一个实例。
class Program { static void Main(string[] args) { Singleton singleton = Singleton.GetInstance(); Singleton singleton2 = Singleton.GetInstance(); Console.WriteLine(singleton == singleton2); // true Console.WriteLine(singleton.Equals(singleton2)); //true Console.ReadLine(); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步