单例模式DEMO
public static object _islock = new object(); #region 单例模式 //只能通过内部创建对象,不让外部创建对象 private static Singleton _singleton = null; public static Singleton CreateInstance() { //先判断是否已经初始化过了,如果初始化过了就不需要锁住等待 if (_singleton == null) { //多个线程用lock(锁) 锁住,执行完了之后在释放 lock (_islock) { //判断第一次进来创建对象,如果没创建就去创建,创建了直接返回 if (_singleton == null) { _singleton = new Singleton(); } } } return _singleton; } #endregion
#region 静态构造函数单例模式 /// <summary> /// 静态构造函数,CLR运行第一次使用这个类时,一定会执行,并且只会执行一次 /// </summary> static Singleton() { _singletonSecond = new Singleton(); } private static Singleton _singletonSecond = null; public static Singleton CreateInstanceSecond() { return _singletonSecond; } #endregion
//每个类都有一个默认的无参构造函数 //调用了默认的无参构造函数 //测试,创建十个对象 //目的,只初始化一次 //单个线程 for (int i = 0; i < 10; i++) { Singleton singleton = new Singleton(); } //多个线程 List<Task> list = new List<Task>(); TaskFactory taskFactory = new TaskFactory(); for (int i = 0; i < 10; i++) { taskFactory.StartNew(() => { Singleton singleton = Singleton.CreateInstance(); }); }
将来的你,一定会感谢现在努力的自己!