1.单例模式
概念:单例模式就是一个类中,提供一个静态方法,始终保证这个类只有一个实例,不会重复去创建。
至于具体详细 https://www.cnblogs.com/restartyang/articles/7770856.html 这里面描述很清楚
public class Program
{
static void Main(string[] args)
{
var a = TestClass.getInstance();
var b = TestClass.getInstance();
Console.Write(a == b);
Console.ReadKey();
}
}
public class TestClass
{
private static TestClass instance;
private TestClass() { }//防止类直接实例化,避免外界直接new
public static TestClass getInstance()
{
if (instance == null)
{
instance = new TestClass();
}
return instance;
}
}
这个时候运行结果为true a和b对象同一个
多线程解决单例模式问题
public class Program
{
static void Main(string[] args)
{
Task.Factory.StartNew(() =>
{
TestClass.getInstance().method();
});
Task.Factory.StartNew(() =>
{
TestClass.getInstance().method();
});
Task.Factory.StartNew(() =>
{
TestClass.getInstance().method();
});
Console.ReadKey();
}
}
public class TestClass
{
private static TestClass instance;
private static readonly object obj = new object(); //需要用到锁 lock
private TestClass(){ }
public static TestClass getInstance()
{
if (instance == null)
{
lock (obj)
{
//这个判断是防止在实例为null的情况下,可能有多个线程都会排队等待进入
//如果没有这判断,则第一个判断进来后所有的线程都会执行实例化
//如果有了这个判断,那么第一个线程实例化以后,后面排队进来的线程就不会再实例化了。
if (instance == null)
{
instance = new TestClass();
}
instance = new TestClass();
}
}
return instance;
}
public void method()
{
Console.WriteLine(DateTime.Now.ToLongTimeString() + " TestMethod()方法执行时间");
}
}