在之前没用lock之前;如果我实现单例模式;直接就是下面的代码:
public class Singleton
{
private static Singleton instance = null;
private Singleton()
{ //构造方法是private,堵死了外界用new实例化
//dosomething
}
//获取本类实例的唯一全局访问点
public static Singleton getInstance()
{
if (instance == null)
{ //若实例不存在,创建一个返回,否则返回已有实例
instance = new Singleton();
}
return instance;
}
}
起初也没碰到问题,之后我看到lock的用法的时候;觉得这个用法不错;也加到了现有的项目中;
项目实例:
#region 数据库层单例模式
private static IDB _EFDB = null;
// Creates an syn object.
private static readonly object SynObject = new object();
public static IDB InstanceEFDB
{
get
{
// Double-Checked Locking
if (null == _EFDB)
{
lock (SynObject)
{
if (null == _EFDB)
{
_EFDB = new EFDB();
}
}
}
return _EFDB;
}
}
#endregion //数据库层单例模式