饿汉式单例

简介: 饿汉式单例

1、简介

饿汉式单例与懒汉式单例的区别在于对象的创建时间。

饿汉式单例在类加载时就已经创建了单例对象,所以不存在多线程访问的问题。

因此饿汉式单例是线程安全的。

2、Java代码

饿汉式单例的实现:

1. public class Singleton {
2. private static final Singleton INSTANCE = new Singleton();
3. private Singleton(){}
4. public static Singleton getInstance(){
5. return INSTANCE;
6.     }
7. }

在类加载时已经创建了单例对象,并且它是由static final 修饰的,保证了单例对象在整个程序中都只有一个实例,所以不会有性能问题,并且也不需要额外的同步操作来保证线程安全。但是饿汉式单例在类加载时就创建了单例对象,因此在某些场景下可能会造成内存浪费。

3、应用场景

对比两种方式(饿汉&懒汉),饿汉式单例线程安全,实例马上就会创建,但是会浪费一定的内存空间。

饿汉单例模式适用于单例对象创建开销不大,并且程序启动时需要使用单例对象的场景。

例如,在程序启动时就需要加载的配置信息,可以使用饿汉式单例来读取配置文件。因为在程序启动时就需要加载配置文件,而且配置文件只需要读取一次,所以可以使用饿汉式单例。

一个经典的应用场景就是在 Java 中的日志管理类,下面是一个简单的实现:

1. public class Logger {
2. private static final Logger INSTANCE = new Logger();
3. private Logger(){
4. //初始化
5.     }
6. public static Logger getInstance(){
7. return INSTANCE;
8.     }
9. public void log(String message){
10. //执行日志记录
11.     }
12. }

这个Logger 类负责管理程序中所有的日志信息,因为在类加载时已经创建了 Logger 对象,所以在整个程序中只有一个 Logger 对象,并且是线程安全的。

这样使用时只需要调用Logger.getInstance().log("log message")来记录日志。

还有一个特殊的场景就是在资源限制的情况下,比如设备硬件限制,或者是其他限制条件下,这种情况下因为不能等待长时间创建对象,又因为每个线程都可能会请求单例对象,所以此时就可以使用饿汉单例模式来保证程序在限制条件下的正常运行。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
10月前
|
安全 算法 数据安全/隐私保护
恶意软件盯上Mac:利用苹果安全工具发起攻击
恶意软件盯上Mac:利用苹果安全工具发起攻击
|
8月前
|
传感器 人工智能 安全
蔚来汽车智能座舱接入通义大模型,并使用通义灵码全面提效
为加速AI应用在企业市场落地,4月9日,阿里云在北京召开AI势能大会。阿里云智能集团资深副总裁、公共云事业部总裁刘伟光发表主题演讲,大模型的社会价值正在企业市场释放,阿里云将坚定投入,打造全栈领先的技术,持续开源开放,为AI应用提速。
|
机器学习/深度学习 人工智能 自然语言处理
人工智能的边界拓展:从理论到实践的飞跃####
本文探讨了人工智能(AI)技术的最新进展,特别是深度学习领域的创新如何推动AI从理论研究走向广泛应用。通过分析几个关键领域的实际应用案例,如医疗健康、自动驾驶和自然语言处理,本文揭示了AI技术的潜力及其对社会和经济的深远影响。文章还讨论了当前面临的挑战,包括伦理问题和技术瓶颈,并展望了未来的发展趋势。 ####
|
8月前
|
算法 定位技术 数据安全/隐私保护
基于遗传优化算法的多AGV栅格地图路径规划matlab仿真
本程序基于遗传优化算法实现多AGV栅格地图路径规划的MATLAB仿真(测试版本:MATLAB2022A)。支持单个及多个AGV路径规划,输出路径结果与收敛曲线。核心程序代码完整,无水印。算法适用于现代工业与物流场景,通过模拟自然进化机制(选择、交叉、变异)解决复杂环境下的路径优化问题,有效提升效率并避免碰撞。适合学习研究多AGV系统路径规划技术。
451 12
|
10月前
|
人工智能 自然语言处理 数据可视化
《当传统遇上AI:Tableau与PowerBI的华丽转身》
在数据可视化与分析领域,Tableau和PowerBI长期占据重要地位。随着AI技术的融入,这两款工具实现了全方位升级,极大提升了用户体验。 Tableau新增自然语言交互、智能洞察挖掘和可视化智能推荐功能,降低了数据分析门槛,帮助用户轻松发现隐藏规律并高效制作图表。PowerBI则通过DAX公式智能编写、移动端智能交互和报表智能订阅等功能,简化了复杂计算,实现了随时随地的数据洞察。两者共同开启了数据处理的新时代,为企业决策提供有力支持。
422 12
|
11月前
|
存储 人工智能 物联网
人人都是设计师,挑战0代码打造专属氛围感风格海报!
无需编程和设计基础,借助阿里云PAI ArtLab,轻松实现任意风格的海报设计。通过在线服务PAI-EAS和对象存储OSS,用户可以快速部署ComfyUI环境,上传线稿后一键生成企业风格海报。提供详细的操作步骤和多种风格示例,如岩石废土风、节日圣诞风和假日海洋风,帮助你轻松上手,快速出图。
419 15
|
jenkins Java 测试技术
Jenkins 在持续集成/持续交付(CI/CD)管道中的应用
【8月更文第31天】 在现代软件开发过程中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提升开发效率和软件质量的重要实践。Jenkins 是一个广泛使用的开源工具,它能够帮助团队实现自动化构建、测试和部署,是 CI/CD 流水线的核心组件之一。本文将详细介绍 Jenkins 在 CI/CD 管道中的应用,并提供具体的代码示例。
522 0
|
存储 监控 视频直播
对象存储OSS产品概念
对象存储OSS产品概念
307 4
|
机器学习/深度学习 人工智能 监控
利用人工智能审查代码:提升代码质量和安全性
【10月更文挑战第15天】本文探讨了AI在代码审查中的应用,介绍了AI辅助代码审查工具如何通过机器学习算法提升代码质量、检测潜在错误,并促进团队知识共享。文中还详细说明了实施AI辅助代码审查的步骤及其实战技巧,强调了结合人工审查、定制化模型和持续监控的重要性。
|
Android开发 开发者 UED
使用AlarmManager实现Android应用中的定时任务
使用AlarmManager实现Android应用中的定时任务