BaseSingle见 简单模式定义
* 代码
public class DoubleCheckSingle : BaseSingle
{
private static readonly object _lock = new object();
private DoubleCheckSingle() { }
private static DoubleCheckSingle _Instance;
public static DoubleCheckSingle GetInstatce()
{
if (null == _Instance)
{
lock (_lock)
{
if (null == _Instance)
_Instance = new DoubleCheckSingle();
}
}
return _Instance;
}
}
- 测试代码
internal delegate void InstanceFun();
public void DoubleCheckedSingleInstance()
{
DoubleCheckSingle.GetInstatce().Method();
}
public void MutilThreadTest(InstanceFun instanceFun)
{
var started = DateTime.Now;
Thread[] threads = new Thread[100];
for (var index = 0; index < 100; index++)
{
Thread thread = new Thread(new ThreadStart(instanceFun));
threads[index] = thread;
}
foreach (var thread in threads)
{
thread.Start();
}
Console.WriteLine("运行时长:{0}", (DateTime.Now - started).Milliseconds);
}
/// <summary>
/// 线程安全,double checked
/// </summary>
[Test]
public void DoubleCheckedSingle()
{
MutilThreadTest(DoubleCheckedSingleInstance);
}
- 测试结果
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
DesignPattern.DoubleCheckSingle.Method:39086322
……
……