第一种最简单,但没有考虑线程安全,在多线程时可能会出问题
public class Singleton
{
private static Singleton _instance = null;
private Singleton() { }
public static Singleton CreateInstance()
{
if (_instance == null)
{
_instance = new Singleton();
}
return _instance;
}
}
第二种考虑了线程安全
public class Singleton
{
private volatile static Singleton _instance = null;
private static readonly object lockHelper = new object();
private Singleton() { }
public static Singleton CreateInstance()
{
if (_instance == null)
{
lock (lockHelper)
{
if (_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
第三种可能是C#这样的高级语言特有的
public class Singleton
{
private Singleton() { }
public static readonly Singleton instance = new Singleton();
}