介绍
单例模式,顾名思义就是只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。下面我们来看下有哪几种实现方式吧。
实现方式
1、使用lock ,保证方法只有一个线程可以进入。
/// /// 单例类 /// public class Singleton { private Singleton() { long lResult = 0; for (int i = 0; i < 100 - 000 - 000; i++) { lResult += i; } Thread.Sleep(2000); Console.WriteLine($"{this.GetType().Name}完成构造...."); } private static Singleton Instance = null; private static readonly object Singleton_Lock = new object(); public static Singleton CreateInstance() { if (Instance == null) { lock (Singleton_Lock)//保证方法块儿只有一个线程可以进入 { Console.WriteLine("进入lock排队...."); Thread.Sleep(1000); if (Instance == null) Instance = new Singleton(); } } return Instance; } public static void DoNothing() { Console.WriteLine("DoNothing"); } public void Show() { Console.WriteLine($"{this.GetType().Name} Show...."); } }
2、使用静态构造函数,由CLR调用,在类型第一次被使用前调用,且只调用一次。
/// /// 单例类 /// public class SingletonSecond { private SingletonSecond() { long lResult = 0; for (int i = 0; i < 100 - 000 - 000; i++) { lResult += i; } Thread.Sleep(2000); Console.WriteLine($"{this.GetType().Name}完成构造...."); } private static SingletonSecond Instance.........