Singleon类:
主程序:
//应对于单线程
public class SingletonA
{
private static SingletonA instance;
//一个私有的构造器,禁用构造器
private SingletonA() {}
public static SingletonA Instance
{
get
{
if (instance == null)
{
instance = new SingletonA();
}
return instance;
}
}
}
//应对于多线程
public class SingletonB
{
//volatile关键字用于禁止编译器对指定的顺序进行微调。
private static volatile SingletonB instance = null;
private static object lockHelper = new object();
//一个私有的构造器,禁用构造器
private SingletonB() {}
public static SingletonB Instance
{
get
{
//双锁,用于保证只一个线程使用这里,防止多线程产生多个实例。
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
instance = new SingletonB();
}
}
return instance;
}
}
}
public class SingletonA
{
private static SingletonA instance;
//一个私有的构造器,禁用构造器
private SingletonA() {}
public static SingletonA Instance
{
get
{
if (instance == null)
{
instance = new SingletonA();
}
return instance;
}
}
}
//应对于多线程
public class SingletonB
{
//volatile关键字用于禁止编译器对指定的顺序进行微调。
private static volatile SingletonB instance = null;
private static object lockHelper = new object();
//一个私有的构造器,禁用构造器
private SingletonB() {}
public static SingletonB Instance
{
get
{
//双锁,用于保证只一个线程使用这里,防止多线程产生多个实例。
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
instance = new SingletonB();
}
}
return instance;
}
}
}
主程序:
public static void Main()
{
SingletonA t1 = SingletonA.Instance;
SingletonA t2 = SingletonA.Instance;
Console.WriteLine(object.ReferenceEquals(t1, t2) == true);
}
{
SingletonA t1 = SingletonA.Instance;
SingletonA t2 = SingletonA.Instance;
Console.WriteLine(object.ReferenceEquals(t1, t2) == true);
}