首页 > 其他分享 >懒汉模式和饿汉模式

懒汉模式和饿汉模式

时间:2024-05-09 13:45:38浏览次数:20  
标签:初始化 饿汉 对象 模式 单例 懒汉

懒汉模式(Lazy Initialization)和饿汉模式(Eager Initialization)是两种常见的单例模式实现方式,它们的区别主要在于对象的初始化时机。

1. **懒汉模式**:
- 懒汉模式是指在第一次使用对象时才进行初始化。
- 在懒汉模式中,单例对象在第一次被使用时创建,因此也被称为延迟加载。
- 懒汉模式通常在多线程环境下需要考虑线程安全问题,因为多个线程可能同时检测到单例对象尚未被创建,从而导致创建多个实例的情况发生。

  可以使用std::call_once在多线程避免被多个线程同时创建对象。
- 懒汉模式的优点是在程序启动时不会占用额外的系统资源,只有在需要时才会进行对象的初始化。

2. **饿汉模式**:
- 饿汉模式是指在类加载时就进行对象的创建和初始化。
- 在饿汉模式中,单例对象在程序启动时就被创建,并且在整个程序生命周期中都保持不变。
- 饿汉模式不需要考虑多线程环境下的线程安全问题,因为单例对象在类加载时就已经被创建,不会存在并发访问的情况。
- 饿汉模式的缺点是在程序启动时就会占用一定的系统资源,可能会导致启动时间较长。

总的来说,懒汉模式适用于单例对象初始化成本较高,且不是在每次程序启动时都需要使用的情况;而饿汉模式适用于单例对象初始化成本较低,且在程序运行期间始终需要使用的情况。

标签:初始化,饿汉,对象,模式,单例,懒汉
From: https://www.cnblogs.com/whcjob/p/18181980

相关文章

  • 易基因:cfDNA甲基化组多模式分析早期检测食管鳞状细胞癌和癌前病变|Nature子刊
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。食管癌(EC)是最常见的胃肠道恶性肿瘤之一,食管鳞状细胞癌(ESCC)是EC的主要组织学亚型,约占新EC病例的88%,大多数发生在东亚和中亚。与晚期ESCC的预后极差相比,早期ESCC(如黏膜内ESCC)和前体病变(如上皮内瘤变,IEN)可以通过内镜下整......
  • FTP主动模式和被动模式(3)NAT对FTP的影响 - NAT ALG
    NAT对FTP的影响NAT环境下FTP存在的问题FTP主动模式FTP服务器在外部网络在FTP主动模式下,如果网络中存在NAT,且FTP客户端在NAT内部网络中,那么FTP数据连接会出现下面的问题,如图:内部网络中的FTP客户端和外部网络中的FTP服务器端通过NAT地址转换是可以正常建立控制连接的,控制连接......
  • FTP主动模式和被动模式
    FTP主动模式和被动模式(1)目录FTP主动模式和被动模式(1)FTP工作原理FTP主动模式FTP被动模式FTP工作原理FTP是基于客户—服务器(C/S)模型而设计的,FTP的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条TCP连接,一条是数据连接,用于数据......
  • FTP主动模式和被动模式(2)- 防火墙对FTP的影响 ASPF
    防火墙对FTP的影响ASPF多通道协议应用层程序有些使用的是单通道协议,有些使用的是多通道协议。单通道协议例如http协议,整个协议交互过程中,服务端和客户端只建立一个连接,并且服务端固定使用一个端口,例如80端口,这种一般为单通道协议;防火墙一般都需要配置精细的安全策略对数据......
  • Java学设计模式之工厂模式
    一、工厂模式概念工厂模式是一种创建型设计模式,用于创建对象而不需要暴露对象的创建逻辑。它将对象的实例化过程封装在一个单独的类中,使得客户端代码只需通过调用工厂类的方法来获取所需的对象,而无需关心具体的实例化过程。工厂模式通常有三种主要的变体:简单工厂模式、工厂方法......
  • MediatR是一个在.NET应用程序中实现“中介者模式”的开源库
    MediatR是一个在.NET应用程序中实现“中介者模式”的开源库。该库通过一种进程内消息传递机制(无其他外部依赖),进行请求/响应、命令、查询、通知和事件的消息传递,并通过泛型来支持消息的智能调度。中介者模式是一种行为设计模式,它允许对象之间通过一个中介者对象进行交互,而不是直接......
  • js圣杯模式
    //圣杯模式改变子属性不会影响父对应的属性//functioninherit(Target,Origin){//functionF(){}//F.prototype=Origin.prototype//Target.prototype=newF()//Target.prototype.constuctor=Target//}varinherit=......
  • golang项目包管理(go module模式)
     修改GO111MODULE和GOPROXYexportGO111MODULE=onexportGOPROXY=https://goproxy.io#GO111MODULE默认为auto,当项目存在go.mod,会自动启用gomodule模式。这里还是直接开启比较好。初始化go.modgomodinit安装依赖goget依赖包#下载的依赖包放在GOPATH下pkg下的m......
  • 23种设计模式笔记-结构型模式
    23种设计模式-结构型模式笔记模板模式前提-模式:概念:规则:实现细节:应用场景:示意图:代码实现:创建型模式适配器、桥接、组合、装饰、外观、享元、代理。适配器模式-接口兼容思想概念:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一......
  • jmeter以命令行模式运行:非GUI界面
    *`-n`:表示非GUI模式运行:命令行模式运行jmeter脚本*`-t`:要执行的jmeter脚本(JMX):a.默认执行当前路径下的脚本,b.或执行指定路径下的脚本*`-l`:生成结果文件(JTL):a.默认在当前路径下生成JTL文件,b.或在指定路径下生成JTL文件*`-e`:生成HTML报告*`-o`:HTML报告的文件夹路径......