单例模式:
1. 程序只需要这个对象实列化一次.
2. 不能解决多线程并发问题
3. 主要应用于 数据库连接池、线程池、流水号生成器、配置文件读取、IOC容器实列
实现方法一(懒汉式)
class Program { static void Main(string[] args) { for (int i = 0; i < 5; i++) { Task.Run(() => { Console.WriteLine($"HashCode is {Singleton.GetInstance().GetHashCode()}"); }); } Console.ReadLine(); } } public class Singleton { private static Singleton _singleton; private static readonly object _lock = new object(); private Singleton() { } public static Singleton GetInstance() { if(_singleton==null) { lock (_lock) { if (_singleton == null) _singleton = new Singleton(); } } return _singleton; } }
实现方法二:(饿汉式)
class Program { static void Main(string[] args) { for (int i = 0; i < 5; i++) { Task.Run(() => { Console.WriteLine($"HashCode is {SingletonSecond.GetInstance().GetHashCode()}"); }); } Console.ReadLine(); } } public class SingletonSecond { private static readonly SingletonSecond _singletonSecond; private SingletonSecond() { } static SingletonSecond() { _singletonSecond = new SingletonSecond(); } public static SingletonSecond GetInstance() { return _singletonSecond; } }