版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37080285/article/details/86520968
单例模式(Singleton Pattern)是 最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
public class Singleton
{
private static Singleton singleton;
private Singleton()
{ }
public static Singleton GetInstance()
{
if (singleton == null)
singleton = new Singleton();
return singleton;
}
}
上面的单例模式的实现在单线程下确实是完美的,然而在多线程的情况下会得到多个Singleton实例,因为在两个线程同时运行GetInstance方法时,此时两个线程判断(uniqueInstance ==null)这个条件时都返回真,此时两个线程就都会创建Singleton的实例,这样就违背了我们单例模式初衷了,既然上面的实现会运行多个线程执行,那我们对于多线程的解决方案自然就是使GetInstance方法在同一时间只运行一个线程运行就好了,也就是线程同步的问题了,具体的解决多线程的代码如下:
public class Singleton
{
private static Singleton singleton;
private static object obj1 = new object();
private Singleton()
{ }
public static Singleton GetInstance()
{
if (singleton == null)
{
lock (obj1)
{
if (singleton == null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}