标签:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Singleton { //饿汉模式:类加载的时候就会实例化一个对象并加载到内存,所以加载类时比较慢,但运行时获取对象的速度比较快,线程安全 public class Singleton { private Singleton() { } private static Singleton s = new Singleton(); public static Singleton getSingleton() { return s; //return new Singleton(); } } //懒汉模式:只在调用getSingleton方法的时候才会实例化对象,所以加载类时比较快,但运行时获取对象的速度比较慢,线程不安全 public class Singleton2 { private Singleton2() { } private static Singleton2 s; public static Singleton2 getSingleton() { if (s == null) { return new Singleton2(); } else { return s; } } } class Program { static void Main(string[] args) { //饿汉模式 Singleton s1 = Singleton.getSingleton(); Singleton s2 = Singleton.getSingleton(); if (s1 == s2) { Console.WriteLine("s1和s2是同一个实例"); } else { Console.WriteLine("s1和s2不是同一个实例"); } //懒汉模式 Singleton s3 = Singleton.getSingleton(); Singleton s4 = Singleton.getSingleton(); if (s3 == s4) { Console.WriteLine("s3和s4是同一个实例"); } else { Console.WriteLine("s3和s4不是同一个实例"); } Console.ReadKey(); } } }
注:懒汉式可以实现延迟加载,但是在多线程并发访问的情况下会出现安全问题,可以通过加同步来解决,只是加上同步效率会稍低,这时候可以再使用双重判断来解决这个低效的问题,加同步的时候使用的锁是该类所属的字节码文件对象。
标签:
原文地址:http://www.cnblogs.com/Ubuntuserzjq/p/4188438.html