java 中单例模式饿汉式与懒汉式的对比
发布时间 - 2026-01-11 02:49:10 点击率:次java 中单例模式饿汉式与懒汉式的对比

概念:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
以前我们的做法是设置一个全局变量,也就是让它使得一个对象被访问。但是它不能防止你实例多个对象。这时我们可以让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且提供一个访问该实例的方法。
通过上面的描述,我们可以看到单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
因此,创建一个类的实例的具体方法(要素)是:
1、 私有的、静态的成员变量
2、 私有的构造方法
3、 公共的、静态的一个入口方法
根据上面的具体方法,我们来看一下下面的代码
public class Test {
private static Test instance = new Test ();
private Test (){
}
public static Test GetInstance(){
return instance;
}
}
从上面的代码中我们看出,当类加载到内存时,在我们调用GetInstance()方法之前,就已经在内存中创建了一个instance对象。也就是说,不管我是否想用这个方法,在内存中就已经存在instance这个对象了,此时这个对象就是多余对象了,这样就会占用内存资源。因此我们将这种单例模式称作“饿汉式”单例模式。其实就是一个“预加载”的过程。
而“懒汉式”单例模式(也就是“延迟式”创建对象)则是在我们需要的时候才去创建这个对象。这样就避免了提前创建对象占用内存资源。
public class Test {
private static Test instance = null;
private Test (){
}
public static Test getInstance(){
if (instance == null) then {
instance = new Test ();
}
return instance;
}
}
但是,通过观察上面的代码,我们可以看出其中还是存在一些问题的。假设,有多个进程同时调用getInstance()方法,这样就可能出现同时创建多个对象,那这就不是单例模式了。因此,我们可以加入“同步”这个关键字使得我们的代码更加的严谨。改进之后是这样的
public class Test {
private static Test instance = null;
private Test (){
}
public static synchronized Test getInstance(){
if (instance == null) then {
instance = new Test ();
}
return instance;
}
}
以上就是java中两种单例模式的对比,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java
# 中单例模式
# 中单例饿汉式与懒汉式的对比
# Java单例模式的线程安全
# 饿汉和懒汉模式详解
# java 单例模式(懒汉式与饿汉式)
# 关于单例模式懒汉式和饿汉式的区别及说明
# 多个
# 我们可以
# 提供一个
# 有一个
# 自己的
# 我是
# 加载
# 这一
# 就会
# 是这样
# 如有
# 则是
# 两种
# 这就
# 希望能
# 可以看到
# 可以看出
# 让它
# 谢谢大家
# 想用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么为数据库表字段添加索引以优化查询
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel如何创建自定义Facades?(详细步骤)
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
高端建站如何打造兼具美学与转化的品牌官网?
如何在IIS服务器上快速部署高效网站?
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Linux安全能力提升路径_长期防护思维说明【指导】
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
微信小程序 canvas开发实例及注意事项
Java遍历集合的三种方式
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
EditPlus中的正则表达式实战(5)
Laravel如何处理和验证JSON类型的数据库字段
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
HTML 中动态设置元素 name 属性的正确语法详解
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Laravel怎么使用artisan命令缓存配置和视图
昵图网官方站入口 昵图网素材图库官网入口
Laravel distinct去重查询_Laravel Eloquent去重方法
如何在阿里云服务器自主搭建网站?
详解MySQL数据库的安装与密码配置
简历在线制作网站免费版,如何创建个人简历?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
创业网站制作流程,创业网站可靠吗?
如何快速搭建FTP站点实现文件共享?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
制作电商网页,电商供应链怎么做?
如何在云主机快速搭建网站站点?
如何解决hover在ie6中的兼容性问题
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
在线教育网站制作平台,山西立德教育官网?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何实现javascript表单验证_正则表达式有哪些实用技巧
JavaScript实现Fly Bird小游戏
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何在橙子建站中快速调整背景颜色?
利用vue写todolist单页应用
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何在Windows虚拟主机上快速搭建网站?
如何快速辨别茅台真假?关键步骤解析

