单例模式中的懒汉模式和饿汉模式是什么?
一、懒汉模式:
顾名思义,他是一个懒汉,他不愿意动弹。什么时候需要吃饭了,他就什么时候开始想办法搞点食物。
即懒汉式一开始不会实例化,什么时候用就什么时候new,才进行实例化。
二、饿汉模式:
顾名思义,他是一个饿汉,他很勤快就怕自己饿着。他总是先把食物准备好,什么时候需要吃了,他随时拿来吃,不需要临时去搞食物。
即饿汉式在一开始类加载的时候就已经实例化,并且创建单例对象,以后只管用即可。
三、懒汉式代码实现:
public class Singleton {//默认不会实例化,什么时候用就什么时候newprivate static Singleton instance = null;private Singleton(){}public static synchronized Singleton getInstance(){if(instance == null){//什么时候用就什么时候newinstance = new Singleton();}return instance;}
}
四、饿汉式代码实现:
public class Singleton {//一开始类加载的时候就实例化,创建单实例对象private static Singleton instance = new Singleton();private Singleton(){}public static Singleton getInstance(){return instance;}
}
五、懒汉式和饿汉式的安全和性能区别:
(1) 线程安全:饿汉式在线程还没出现之前就已经实例化了,所以饿汉式一定是线程安全的。懒汉式加载是在使用时才会去new 实例的,那么你去new的时候是一个动态的过程,是放到方法中实现的,比如:
public static synchronized Singleton getInstance() {if(instance == null){//什么时候用就什么时候newinstance = new Singleton();}
}
如果这个时候有多个线程访问这个实例,这个时候实例还不存在,还在new,就会进入到方法中,有多少线程就会new出多少个实例。一个方法只能return一个实例,那最终return出哪个呢?是不是会覆盖很多new的实例?这种情况当然也可以解决,那就是加同步锁,避免这种情况发生 。
(2)执行效率:饿汉式没有加任何的锁,因此执行效率比较高。懒汉式一般使用都会加同步锁,效率比饿汉式差。
(3)内存使用:饿汉式在一开始类加载的时候就实例化,无论使用与否,都会实例化,所以会占据空间,浪费内存。懒汉式什么时候用就什么时候实例化,不浪费内存。
单例模式中的懒汉模式和饿汉模式是什么?相关推荐
- 2023-01-26 JS设计模式-单例模式:单例模式的原理和实现,懒汉模式和饿汉模式,单例模式实现登录框
文章目录 1.什么是单例模式? 介绍 特点 结构 2.如何实现一个单例模式? 思路 实现代码 3.单例模式的优缺点 4.懒汉模式和饿汉模式 懒汉模式:一开始不会实例化,什么时候用才new出来实例化 饿 ...
- 大聪明教你学Java设计模式 | 第一篇:单例模式 (懒汉模式和饿汉模式)
前言 大聪明在写代码的过程中发现设计模式的影子是无处不在,设计模式也是软件开发人员在软件开发过程中面临的一般问题的解决方案.大聪明本着"独乐乐不如众乐乐"的宗旨与大家分享一下设计模 ...
- 单例模式的C++实现(懒汉模式和饿汉模式的详细讲解和实现)
文章目录 前言 一.单例模式的概念 1.2单例模式的分类 1.2懒汉和饿汉的利弊 二.代码实现 1.饿汉模式 2.懒汉模式 总结 前言 提示:单例模式的出现.由于在某些场景中你最多而且必须有一个对象存 ...
- C++设计模式--单例模式详解(懒汉模式、饿汉模式、双重锁)
C++设计模式--单例模式详解(懒汉模式.饿汉模式.双重锁) 应用场景 一.单例模式是什么? 二.使用步骤 1.UML图 2.代码实现 应用场景 通常我们在做通讯的时候,我们跟服务器数据交互,假如每次 ...
- C# 设计模式之单例模式(懒汉模式、饿汉模式、静态内部类模式)
C# 设计模式之单例模式(懒汉模式.饿汉模式.静态内部类模式) 应用场景:在整个软件运行生命周期内,一个类只允许一次实例化,例如数据库连接池的连接对象创建:通过使用单例模式来避免反复创建连接对象,从而 ...
- Java 懒汉模式与饿汉模式
懒汉模式与饿汉模式 1.饿汉模式demo 来了就要吃,相当于有现成的- public class EleManSingleton { //1.创建类的唯一实例,使用private static修饰 p ...
- 单例模式---懒汉模式与饿汉模式
单例模式:1)一个类只能创建一个实例2)构造函数和静态变量(加载类时即初始化)需为private3)get方法应该为public static,可供全局访问 //懒汉模式 public class l ...
- 设计模式——单例模式(懒汉模式,饿汉模式)
声明: 本博客参考C语言中文网和优秀博客总结得出: (1)C语言中文网链接 (2)优秀博客链接 单例模式的定义: 指一个类只有一个实例,且该类能自行创建这个实例的一种模式.例如,Windows 中只能 ...
- C++单例模式 : 懒汉模式 与 饿汉模式
单例模式: 只能有一个实例,有懒汉和饿汉区分,实现核心思想: 1.构造函数私有化 2.使用静态函数作为接口来获取类对象 1.懒汉模式: ...
- Scala中简单实现懒汉模式和饿汉模式
在Scala中简单实现单例模式,代码如下: object Test_Singleton {def main(args: Array[String]): Unit = {// 测试是否成功// 懒汉va ...
最新文章
- 数据结构与算法:03 C#面向对象设计 I
- 第15章 MiniVGGNet:更深的CNNs
- python手机版idle-Python IDLE下载
- c语言五子棋linux,在linux下ubuntu的五子棋游戏c语言代码.doc
- 关于PHP安装扩展pdo_odbc
- Sqlserver 查询语句性能测试
- linux内核之 phys_to_virt
- eclipse自动补全
- 极点五笔状态栏的隐藏和显示的快捷键
- mysql编译innodb_源码编译MySQL5.1生成InnoDB存储引擎_MySQL
- mysql qps如何查看_一款查看mysql QPS的脚本
- 卡诺模板_无关条件的卡诺地图
- php文件操作(上传文件)1
- 浅析设计模式(三)——抽象工厂模式
- 离线 ocr 开源_在线和离线开始使用开源
- 阿里技术参考图册-研发篇
- 学术第一步:搞清楚SCI、EI、ISTP和中文核心期刊的区别
- 《商务与经济统计》学习笔记(一)---数据与统计资料
- ADAS常见缩略词(FCW/LKA/LCA/LDW...)
- Mysql批量删除大量数据
热门文章
- android translateanimation动画,Android 动画之TranslateAnimation应用详解
- 为什么计算机软件是无形资产,购买软件是否属于无形资产
- 首都师范 博弈论 5 4 2 Shapley值应用案例
- 买房注意事项收集(zt)
- 无线传感器网络MAC协议(下)
- 【Python】判断多边形的形状为凸多边形还是凹多边形
- Java 根据身份证号获取性别、年龄、出生日期等信息
- 计算机网络练习题-3
- Linux中缺32位运行库steam,Steam运行库修复工具 32位/64位 最新免费版
- Artnet对话孙宇晨:做自己的偶像