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

从源码学习单例模式

单例模式

        单例模式是一种设计模式,常用于确保一个类只有一个实例,并提供一个全局访问点。这意味着无论在程序的哪个地方,只能创建一个该类的实例,而不会出现多个相同实例的情况。

        在单例模式中,常用的实现方式包括懒汉式和饿汉式:

  1. 懒汉式:在第一次调用获取实例的方法时才创建实例,实现简单但在多线程环境下需要考虑线程安全性。

  2. 饿汉式:在类加载时就创建实例,保证了线程安全,但可能会造成资源浪费。

饿汉式单例模式

        饿汉式单例模式是一种在类加载时就创建实例的单例模式。

        在该模式中,实例被静态初始化,因此在程序运行时实例已经存在,不需要在获取实例时进行额外的判断和同步操作,从而保证了线程安全性。这样的实现方式简单直接,适用于大多数情况。

下面是一个典型的饿汉式单例模式的Java示例:

public class Singleton {private static final Singleton instance = new Singleton();private Singleton() {// 私有构造方法,防止外部实例化}public static Singleton getInstance() {return instance;}
}

在这个示例中,Singleton类中的instance实例在类加载时就被创建,因为它是静态的,并且是final类型的,确保了线程安全,即使在多线程环境下也不会出现多个实例的情况。

例如上述代码,实现了一个简单的饿汉式单例模式,通过静态内部类和静态变量的方式,确保在Java应用中只有一个 Factory 实例存在,并提供了静态方法 getFactory() 来获取该实例。

饿汉式单例适场景

  1. 单例对象较小:如果单例对象的初始化和占用的资源比较小,可以在程序启动时就创建实例,避免在后续使用过程中频繁创建和销毁对象,提高性能。

  2. 线程安全要求高:在需要保证线程安全的情况下,饿汉式单例模式是一个很好的选择,因为它在类加载时就创建实例,不需要进行额外的同步操作,避免了线程安全问题。

  3. 对象初始化较简单:如果单例对象的初始化比较简单,并且不依赖于外部参数或环境,饿汉式单例模式是一个合适的选择,可以在类加载时完成初始化。

总的来说,饿汉式单例模式适用于对资源消耗较小、线程安全要求高以及对象初始化简单的情况。它提供了一种简单、线程安全的单例实现方式,适用于大多数情况。

http://www.lryc.cn/news/305786.html

相关文章:

  • axios介绍和使用
  • redis雪崩问题
  • [SUCTF 2019]EasySQL1 题目分析与详解
  • TestNG与ExtentReport单元测试导出报告文档
  • 【JavaEE】_form表单构造HTTP请求
  • Mysql中INFORMATION_SCHEMA虚拟库使用
  • 【《高性能 MySQL》摘录】第 2 章 MySQL 基准测试
  • 常用的Web应用程序的自动测试工具有哪些
  • 人工智能与开源机器学习框架
  • 高通XBL阶段读取分区
  • [极客大挑战2019]upload
  • [FastDDS] 基于eProsima FastDDS的移动机器人数据中间件
  • 实现外网手机或者电脑随时随地远程访问家里的电脑主机(linux为例)
  • spring boot集成redis
  • Docker的常用命令
  • JSON简介与基本使用
  • 好物周刊#40:多功能文件管理器
  • 【洛谷 P8780】[蓝桥杯 2022 省 B] 刷题统计 题解(贪心算法+模拟+四则运算)
  • 【蓝桥杯入门记录】静态数码管例程
  • 6.openEuler系统服务的配置和管理(二)
  • 一招鲜吃遍天!ChatGPT高级咒语揭秘:记忆、洗稿、速写SEO文章(一)
  • LeetCode 每日一题 2024/2/19-2024/2/25
  • Javaweb之SpringBootWeb案例之配置优先级的详细解析
  • GO框架基础 (三)、xorm库
  • 神经网络系列---回归问题和分类问题
  • Jetpack Compose 与 Kotlin 的兼容性对应关系
  • 汇编反外挂
  • 134 Linux 系统编程11 ,readlink命令,文件目录rwx权限差异,目录操作函数
  • 仿12306校招项目业务二(列车检索)
  • 前端架构: 实现脚手架终端UI样式之ANSI escape code, Chalk, Ora介绍