怎么登陆建设u盾网站网络销售平台排名
web/
2025/9/26 23:07:37/
文章来源:
怎么登陆建设u盾网站,网络销售平台排名,网站seo 优帮云,合肥网页制作联系方式目录
前言#xff1a;
优点#xff1a;
缺点:
饿汉式#xff08;静态变量方式#xff09;
懒汉式#xff08;线程不安全#xff09;
懒汉式#xff08;双重检查锁定#xff09;
推荐方式Lazy
总结#xff1a; 前言#xff1a;
这种模式涉及到一个单一的类
优点
缺点:
饿汉式静态变量方式
懒汉式线程不安全
懒汉式双重检查锁定
推荐方式Lazy
总结 前言
这种模式涉及到一个单一的类该类负责创建自己的对象同时确保只有单个对象被创建。这个类提供 了一种访问其唯一的对象的方式可以直接访问不需要实例化该类的对象。
单例设计模式分类两种
饿汉式类加载就会导致该单实例对象被创建懒汉式类加载不会导致该单实例对象被创建而是首次使用该对象时才会创建
优点
以保证内存里只有一个实例减少了内存的开销避免对资源的多重占用设置全局访问点可以优化和共享资源的访问。
缺点:
一般没有接口扩展困难;在调试过程中如果单例中的代码没有执行完也不能模拟生成一个新的对象;功能代码设计不合理的话容易违背单一职责原则。
饿汉式静态变量方式
public class Singleton
{//私有构造方法private Singleton(){}//在成员位置创建该类的对象private static Singleton _sSingleton new Singleton();//对外提供静态方法获取该对象public static Singleton GetSingleton(){return _sSingleton;}
}
该方式生命Singleton类型静态变量并创建静态对象_sSingleton该方式中_sSingleton对象是随着类的加载而创建因为被静态修饰符所修饰如果一直没有使用该对象就会造成内存的浪费。
懒汉式线程不安全
public class Singleton
{//私有构造方法private Singleton(){}//在成员位置创建该类的对象private static Singleton? _sSingleton;//对外提供静态方法获取该对象public static Singleton GetSingleton(){if (_sSingleton null){_sSingleton new Singleton();}return _sSingleton;}
}
在这种方式中声明Singleton类型静态变量后并没有立刻对对象进行赋值而是在调用GetSingleton时对_sSingleton判断是否为第一次调用如果是则赋值因此实现了懒加载效果但是如果是多线程环境会出现线程安全问题。
懒汉式双重检查锁定
解决线程安全问题我们可以使用lock关键字
lock关键字在C#中用于创建临界区它可以确保同时只有一个线程能够执行被它限制的代码块。使用方法如下
lock (variable) {// 被保护的代码块。
}
如下使用 lock 语句确保当一次只有一个线程可以进入该代码段从而防止在多线程环境下创建出多个 Singleton 实例。如果其他线程试图进入锁定的代码那么他们将阻塞即暂停执行直到原来的线程退出锁定的代码。因此容易造成线程阻塞
public class Singleton
{//定义了一个静态只读的对象_lockObject,用于控制对实例对象的访问private static readonly object _lockObject new object();private static Singleton? _sSingleton;private Singleton(){}public static Singleton Instance{get{lock (_lockObject){if (_sSingleton null){_sSingleton new Singleton();}return _sSingleton;}}}
}
推荐方式Lazy
使用Lazy是一种在C#中实现线程安全的单例模式的推荐方法这种方式在.NET 4.0后开始提供。因为Lazy类型为线程安全并且延迟初始化提供了良好的支持。Lazy 会处理所有线程安全性问题这是当前在C#中创建单例的首选方式。
public sealed class Singleton
{private static readonly LazySingleton lazy new LazySingleton(() new Singleton());public static Singleton Instance { get { return lazy.Value; } }private Singleton(){}
}
总结
单例模式对外只能产生一个对象饿汉模式是提前创建好这个对象而懒汉模式是用的时候再创建对比从内存角度懒汉用的时候才创建更节省内存从速度的角度饿汉提前创建好了获取对象的时候速度会更快。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82433.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!