单例模式
/// <summary>
/// 饿汉模式
/// </summary>
public class SafeSingleton
{
//定义私有变量
private static SafeSingleton _instance = new SafeSingleton();
/// <summary>
/// 构造函数私有
/// </summary>
private SafeSingleton()
{
}
/// <summary>
/// 返回唯一实例
/// </summary>
/// <returns></returns>
public static SafeSingleton GetInstance()
{
return _instance;
}
}
/// <summary>
/// 懒汉模式 多线程不安全(无锁)
/// </summary>
public class UnSafeSingleton
{
private static UnSafeSingleton _instance ;
private UnSafeSingleton()
{
}
public UnSafeSingleton GetInstance()
{
if (_instance == null)
{
_instance = new UnSafeSingleton();
}
return _instance ;
}
}
/// <summary>
/// 懒汉方法多线程安全
/// </summary>
public class SafeSyncSingleton
{
private static SafeSyncSingleton _instance = null;
/// <summary>
/// 程序运行时创建一个静态只读变量对象
/// </summary>
private static readonly object sync = new object();
private SafeSyncSingleton()
{
}
public static SafeSyncSingleton GetInstance()
{
//当_instance为空时,如果两个线程同时调用GetInstance方法
if (_instance == null)
{
lock (sync)
{
//很关键,没有这个判断,进入的两个线程就可以创建两个实例了
if (_instance == null)
{
_instance = new SafeSyncSingleton();
}
}
}
return _instance;
}
}
单例模式保证一个类仅有一个实例
单例模式一般有饿汉模式和懒汉模式
饿汉模式对多线程是安全的
懒汉模式对多线程是不安全的,可以互斥锁解决不安全性。