1.单线程单例
确保一个类只有一个实例,并提供一个访问它的全局访问点
概念拆分(1.一个类只有一个实例2.提供一个全局访问点)
public class Singleton
{
private static Singleton singleton; //定义一个静态变量来保护类的实例
public static Singleton GetSingleton()
{
if(singleton == null) //如果是多线程的话,造成多个实例
{
singleton = new Singleton();
}
return Singleton;
}
}
1.Singleton模式中的实例构造器可以设置为protected以允许子类派生
2.Singleton模式一般不要支持ICloneable接口,因为这个可能会导致多个对象实例,与SIngleton模式的初衷违背
3.Singleton模式不支持序列化,因为这个也有可能导致多个对象实例,同样与Singleton初衷违背
4.Singleton只考虑了对象创造的管理,没有考虑对象销毁的管理,就支持垃圾回收的平台和对象的开销来讲,我们一般没有必要对其销毁进行特殊处理
5.不能应对多线程环境,在多线程环境下,使用Singleton模式任然由可能得到Singleton类的多个实例
二、多线程的单例模式
private static volatile Singleton instance = null;
private static objiect lockHelper = new object(); //定义一个标识确保线程的安全同步
public static Singleton Instance //定义共有方法提供一个全局访问点
{
get
{
if (_instance == null)
{
lock (typeof(lockHelper )) //当第一个线程运行到这里加锁,第二个运行线程,首先检测加锁状态,该线程就会等待挂起,等待第一个线程解锁
{
if (_instance == null)
{
_instance = new CrnBizManager();
}
}
}
return _instance;
}
}
标签:Singleton,模式,instance,实例,static,单例,线程,多线程 From: https://www.cnblogs.com/melody7894/p/18358262