前言:
一、线程不安全的单例
懒汉模式,线程不安全,不建议使用。
public class Singleton
{
private Singleton() { }
private static Singleton singleton = null;
public static Singleton CreateInstance()
{
if (singleton == null)
singleton = new Singleton();
return singleton;
}
}
二、使用锁实现单例
懒汉模式,线程安全
public class Singleton
{
private Singleton() { }
private static Singleton singleton = null;
private static readonly object singletonLock = new object();
public static Singleton CreateInstance()
{
if (singleton == null)
{
lock (singletonLock)
{
if (singleton == null)
singleton = new Singleton();
}
}
return singleton;
}
}
三、使用静态构造函数实现单例
饿汉模式,线程安全
public class Singleton
{
private Singleton() { }
private static readonly Singleton singleton = null;
static Singleton()
{
singleton = new Singleton();
}
public static Singleton CreateInstance()
{
return singleton;
}
}
四、使用静态字段实现单例
饿汉模式,线程安全
public class Singleton
{
private Singleton() { }
private static readonly Singleton singleton = new Singleton();
public static Singleton CreateInstance()
{
return singleton;
}
}
五、使用Lazy实现单例
懒汉模式,线程安全
public class Singleton
{
private Singleton() { }
private static readonly Lazy<Singleton> lazy =
new Lazy<Singleton>(() => new Singleton());
public static Singleton CreateInstance()
{
return lazy.Value;
}
}