哪种情况下使用单例模式?
单例不是为了解决线程冲突的
是为了让一个进程中,某个类只有一个实例存在 。
数据临时存储的地方(如数据库链接池、线程池、静态字典等)
单例模式的实现
1.构造函数私有化(private)
2.全局唯一的静态变量(重用这个变量)
3.公开一个静态方法来提供对象实例(CreateInstance)
4.双if+lock
public class SomeThing
{
/// <summary>
/// 1.私有化构造函数
/// </summary>
private SomeThing()
{
//do somthing.....
}
/// <summary>
/// 2.全局唯一的静态变量(重用)
/// volatile关键字 促进线程安全
/// </summary>
private static volatile SomeThing _someThing = null;
private static object Something_Lock = new object();
/// <summary>
/// 3.公开的静态方法来提供对象的实例
/// </summary>
/// <returns></returns>
public static SomeThing CreateInstance()
{
if (_someThing == null)//如果不为空直接返回 如果不进行判断多线程下会在lock处排队
{
lock (Something_Lock)//保证只有一个线程 能进入初始化
{
if (_someThing == null)
{
_someThing = new SomeThing();
}
}
}
return _someThing;
}
}