三、对象生存期
不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
复制代码
/// <summary>
/// 单例模式
/// </summary>
public class Singleton
{
// 定义一个静态变量来保存类的实例
private static Singleton mySingleton;
// 定义私有构造函数,使外界不能创建该类实例
private Singleton()
{
}
//定义公有方法提供一个全局访问点。
public static Singleton GetInstance()
{
//这里的lock其实使用的原理可以用一个词语来概括“互斥”这个概念也是操作系统的精髓
//其实就是当一个进程进来访问的时候,其他进程便先挂起状态
if (mySingleton == null)
{
mySingleton = new Singleton();
}
return mySingleton;
}
}
上面的单例模式的实现是有问题的,当多个用户或者方法同时访问的时候,便会出现多个用户同时拿到了mySingleton==null的结果,这个明显不是我们想要的,因此,我们应该通过一个锁来互斥这个方法,当很多线程同时访问的时候,只允许一个线程进入到代码中执行,而其他的便只能处于挂起的状态。










