当前位置: 首页 > news >正文

咋做211校徽加网站东莞网络营销全网推广

咋做211校徽加网站,东莞网络营销全网推广,大型html5浅蓝色网站设计公司dede模板,宁德企业网站建设目录 前言: 优点: 缺点: 饿汉式(静态变量方式) 懒汉式(线程不安全) 懒汉式(双重检查锁定) 推荐方式Lazy 总结: 前言: 这种模式涉及到一个单一的类&a…

目录

前言:

优点:

缺点:

饿汉式(静态变量方式)

懒汉式(线程不安全)

懒汉式(双重检查锁定)

推荐方式Lazy

总结:


前言:

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供 了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

单例设计模式分类两种:

  1. 饿汉式:类加载就会导致该单实例对象被创建
  2. 懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建

优点:

  1. 以保证内存里只有一个实例,减少了内存的开销;
  2. 避免对资源的多重占用;
  3. 设置全局访问点,可以优化和共享资源的访问。

缺点:

  1. 一般没有接口,扩展困难;
  2. 在调试过程中,如果单例中的代码没有执行完,也不能模拟生成一个新的对象;
  3. 功能代码设计不合理的话,容易违背单一职责原则。

饿汉式(静态变量方式)

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 Lazy<Singleton> lazy =new Lazy<Singleton>(() => new Singleton());public static Singleton Instance { get { return lazy.Value; } }private Singleton(){}
}

总结:

单例模式对外只能产生一个对象,饿汉模式是提前创建好这个对象,而懒汉模式是用的时候再创建,对比:从内存角度懒汉用的时候才创建,更节省内存;从速度的角度,饿汉提前创建好了,获取对象的时候速度会更快。

 

http://www.hrbkazy.com/news/2948.html

相关文章:

  • 做ppt模板网站有哪些googleplay安卓版下载
  • 南阳建设网站哪家好周口网络推广哪家好
  • 名字设计网站网站访问量排行榜
  • 软件开发用什么软件上海做seo的公司
  • 59zwd一起做网站百度的竞价排名是哪种方式
  • 提供网站建设空间网站建设方案推广
  • 网站开发选择题核心关键词是什么意思
  • tk注册网站网盘资源搜索神器
  • 长春美容网站建设工程建设数字化管理平台
  • 前端转网站建设网络精准营销推广
  • 宁波其它区高端关键词优化嘉峪关seo
  • 佛山h5建站模板营销网站seo推广
  • ftp可以发布网站吗百度指数有什么作用
  • 高水平 专业 建设 网站站长工具权重查询
  • 复制wordpress文章莆田seo
  • 淘宝客网站可以做百度推广seo是什么姓
  • jsp网站建设美食浏览器2345网址导航下载安装
  • 学编程能干什么宁波seo排名外包
  • 哪家做公司网站优化网站服务
  • 手机触屏版网站开发百度快速收录权限域名
  • 专业做汽车的网站怎么做营销推广
  • 做网站有自己的服务器百度电商平台
  • 开发平台为用户提供了哪四类seo综合
  • 注册公司注册企业注册网络优化工程师为什么都说坑人
  • 做的最好的美女视频网站免费创建个人网页
  • vi企业设计重庆seo务
  • 济南手工网站建设公司百度指数怎么查
  • 深圳专业网站设计公司价格百度浏览器下载
  • 青岛工商注册核名查询系统seo搜索价格
  • 网站平台建设技术报告怎么样创建网站