单例模式:一种常用的软件设计模式,设计模式中最简单的形式之一。
定义:保证一个类仅有一个对象实例,并提供一个访问它的全局访问点。
1.线程不安全(适用于单线程环境,因为在多线程的环境下有可能得到Singleton类的多个实例。)
public class A{
private static A instance;
public static A Instance{
get{
if(instance==null)instance=new A();
return instance;
}
}
//私有化构造器
private A(){}
}
2.单锁:如果其他线程试图进入锁定的代码,则它将一直等待,直到该对象被释放。从而确保在多线程下不会创建多个对象实例了。只是这种实现方式要进行同步操作,这将是影响系统性能的瓶颈和增加了额外的开销。
3.双重锁定方式:
class Singleton
{
private static Singleton _instance;
//私有化构造器
private Singleton() { }
//上锁,双重锁方式较好地解决了多线程下的单例模式实现。(因为线程并发获取实例问题,即可能出现两个线程同时获取instance实例)
private static object _lock = new object();
public static Singleton Instance{
get {
if (_instance == null)
{
lock (_lock)
{
if (_instance == null) _instance = new Singleton();
}
}
return _instance;
}
}
}