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

每日一题:单例模式

每日一题:单例模式

单例模式是确保一个类只有一个实例,并提供一个全局访问点

7f3ba8dd532ba47c2e1c2a7930ef9a79.png

1.饿汉式(静态常量)

  • 特点:在类加载时就创建了实例。

  • 优点:简单易懂,线程安全。

  • 缺点:无论是否使用,都会加载实例。

public class Singleton {private static final Singleton INSTANCE = new Singleton();private Singleton() {}public static Singleton getInstance() {return INSTANCE;}
}

2. 懒汉式(线程不安全)

  • 特点:在第一次调用 getInstance() 方法时创建实例。

  • 优点:按需创建实例。

  • 缺点:线程不安全。

public class Singleton {private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

备注:线程安全可以直接使用synchronized加在方法上。

3. 懒汉式(双重检查锁定)

  • 特点:在第一次调用 getInstance() 方法时创建实例,使用双重检查锁定保证线程安全。

  • 优点:按需创建实例,线程安全。

  • 缺点:稍微复杂一些。

public class Singleton {private volatile static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

4. 静态内部类

  • 特点:利用 Java 的类加载机制保证单例的唯一性。

  • 优点:懒加载,线程安全。

  • 缺点:稍微复杂一些

public class Singleton {private Singleton() {}private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}

5. 枚举

  • 特点:利用枚举类型的特性实现单例。

  • 优点:简洁,线程安全。

  • 缺点:不太常用。

public enum Singleton {INSTANCE;public void Method() {//实现方法System.out.println("实现方法")}
}

总结

单例模式确保一个类就只有一个实例,提供一个全局的访问点。确保一个类只有一个实例:类构造器私有化,避免其他地方可以new对象。提供一个全局的访问点:静态化私有变量,以及提供一个静态方法返回实例。需要考虑线程是否安全,以及为了避免浪费资源,线程安全问题,考虑互斥性,原子性,可见性

往期推荐

每日一题:青蛙跳台阶问题

Mysql优化相关学习(1)

Mysql8.0安装以及递归表达式使用

一文带你springai+ollama实现chat

大型语言模型(Large Language Model, LLM)了解一下?


相关文章:

每日一题:单例模式

每日一题:单例模式 ❝ 单例模式是确保一个类只有一个实例,并提供一个全局访问点 1.饿汉式(静态常量) 特点:在类加载时就创建了实例。优点:简单易懂,线程安全。缺点:无论是否使用&…...

前端_001_html扫盲

文章目录 概念标签及属性常用全局属性head里常用标签body里常用标签表情符号 url编码 概念 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body></bod…...

49 | 桥接模式:如何实现支持不同类型和渠道的消息推送系统?

上一篇文章我们学习了第一种结构型模式&#xff1a;代理模式。它在不改变原始类&#xff08;或者叫被代理类&#xff09;代码的情况下&#xff0c;通过引入代理类来给原始类附加功能。代理模式在平时的开发经常被用到&#xff0c;常用在业务系统中开发一些非功能性需求&#xf…...

使用js和canvas实现简单的网页贪吃蛇小游戏

玩法介绍 点击开始游戏后&#xff0c;使用键盘上的↑↓←→控制移动&#xff0c;吃到食物增加长度&#xff0c;碰到墙壁或碰到自身就游戏结束 代码实现 代码比较简单&#xff0c;直接阅读注释即可&#xff0c;复制即用 <!DOCTYPE html> <html lang"en"…...

Kafka SASL/PLAIN认证模式

Kafka 认证模式命令使用示例 创建Topic 指定用户创建 [rootkafka01 kraft]# /usr/local/kafka3.5-sasl-data/bin/kafka-topics.sh --bootstrap-server x.x.x.11:9092 --create --topic fkaaa35 --replication-factor 3 --partitions 3 --command-config /usr/local/kafka3.…...

苹果AI科学家研究证明基于LLM的模型存在缺陷 因为它们无法推理

苹果公司人工智能科学家的一篇新论文发现&#xff0c;基于大型语言模型的引擎&#xff08;如 Meta 和 OpenAI 的引擎&#xff09;仍然缺乏基本的推理能力。该小组提出了一个新的基准–GSM-Symbolic&#xff0c;以帮助其他人衡量各种大型语言模型&#xff08;LLM&#xff09;的推…...

鸿蒙NEXT开发-页面路由(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…...

asp.net Core MVC 内容协商

内容协商 内容协商是Asp.Net Core 控制器的一项功能&#xff0c;而Asp.Net MVC5 控制器并不支持它。 引入内容协商是为了满足 Web API 框架的需要。 在 Asp.net Core 中&#xff0c;内容协商 被内置到引擎中&#xff0c;供开发人员使用。 顾名思义&#xff0c;内容协商指的是…...

智能EDA小白从0开始 —— DAY10 Yosys

Yosys 概述 工作原理 Yosys的工作原理深入来讲&#xff0c;是一个复杂但有序的硬件设计自动化流程&#xff0c;其核心在于将高级硬件描述语言&#xff08;HDL&#xff09;如Verilog或VHDL编写的代码&#xff0c;通过一系列精细的步骤转换为门级网表。这一流程首先涉及对HDL代…...

《OpenCV计算机视觉》—— 人脸检测

文章目录 一、人脸检测流程介绍二、用于人脸检测的关键方法1.加载分类器&#xff08;cv2.CascadeClassifier()&#xff09;2.检测图像中的人脸&#xff08;cv2.CascadeClassifier.detectMultiscale()&#xff09; 三、代码实现 一、人脸检测流程介绍 下面是一张含有多个人脸的…...

【unity框架开发12】从零手搓unity存档存储数据持久化系统,实现对存档的创建,获取,保存,加载,删除,缓存,加密,支持多存档

文章目录 前言一、Unity对Json数据的操作方法一、JsonUtility方法二、Newtonsoft 二、持久化的数据路径三、数据加密/解密加密方法解密方法 四、条件编译指令限制仅在编辑器模式下进行加密/解密四、数据持久化管理器1、存档工具类2、一个存档数据3、存档系统数据类4、数据存档存…...

YOLOv11进行图像与视频的目标检测

一、AI应用系统实战项目 项目名称项目名称1.人脸识别与管理系统2.车牌识别与管理系统...

SpinalHDL之错误集(一)

本文作为SpinalHDL学习笔记第七十六篇&#xff0c;作为错误集使用&#xff0c;类似高中生的错题集&#xff0c;记录使用SpinalHDL过程中遇到的问题&#xff0c;小到语法错误、版本兼容问题&#xff0c;大到SpinalHDL库函数错误等等&#xff0c;持续更新。 SpinalHDL学习笔记总…...

【arcgis】ArcGIS中如何避免标注压盖要素

ArcGIS中如何避免标注压盖要素 在制图工作中&#xff0c;标注&#xff08;Label&#xff09;是传达地理信息的重要方式。然而&#xff0c;在复杂的地图上&#xff0c;标注容易出现压盖要素的情况&#xff0c;影响地图的美观性和信息的准确传达。ArcGIS提供了Maplex标注引擎&am…...

数通--3

一、动态路由 内部 路由器之间要互联互通&#xff0c;必须遵循相同的协议 企业内部用 IGP&#xff0c;企业之间用BGP RIP&#xff08;已淘汰&#xff0c;不考&#xff09; 距离就是长短&#xff0c;矢量就是方向&#xff0c;即路由的出接口 一台路由器 A 配好RIP&#xff0c;…...

SpringBoot基础(五):集成JUnit5

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 SpringBoot基础(二)&#xff1a;配置文件详解 SpringBoot基础(三)&#xff1a;Logback日志 SpringBoot基础(四)&#xff1a;bean的多种加载方式 SpringBoot基础(五)&#xff1a;集成JUnit5 目录 一、JUnit…...

正点原子学习笔记之汇编LED驱动实验

1 汇编LED原理分析 为什么要写汇编     需要用汇编初始化一些SOC外设     使用汇编初始化DDR、I.MX6U不需要     设置sp指针&#xff0c;一般指向DDR&#xff0c;设置好C语言运行环境 1.1 LED硬件分析 可以看到LED灯一端接高电平&#xff0c;一端连接了GPIO_3上面…...

网络学习第二篇

认识网关和路由器 这里大家先了解一下什么三层设备。 三层设备 三层设备是指在网络架构中能够工作在第三层&#xff08;网络层&#xff09;的设备&#xff0c;通常包括三层交换机和路由器。这些设备可以根据IP地址进行数据包的转发和路由选择&#xff0c;从而在不同的网络之间…...

一些小结汇总

1.常用浏览器及对应内核 Safari浏览器&#xff08;苹果浏览器&#xff09;:Webkit内核 Google浏览器&#xff1a;Blink内核 Firefox&#xff1a;Gecko内核 Edge浏览器&#xff1a;Chromium内核 IE浏览器&#xff1a;Trident内核 2.10个块标签和10个行标签 …...

20240720 科大讯飞 笔试

文章目录 1、选择题1.11.21.31.41.51.61.71.81.91.101.111.122、编程题2.12.22.33、选择题(Linux 选做)3.13.23.34、选择题(C++ 选做)4.14.24.34.44.54.64.75、选择题(数据库选做)5.15.25.3岗位:嵌入式开发工程师 题型: 必做:12 道选择题,3 道编程题 选做:Linux(3…...

SDPose-Wholebody模型在卷积神经网络架构上的创新优化

SDPose-Wholebody模型在卷积神经网络架构上的创新优化 人体姿态估计技术正在从简单的身体关节点检测向全身精细化识别演进&#xff0c;而SDPose-Wholebody通过创新的卷积神经网络架构设计&#xff0c;将这一技术推向了新的高度。 1. 核心架构设计突破 SDPose-Wholebody的最大创…...

追踪Elsevier审稿进度:开源工具如何提升学术投稿效率

追踪Elsevier审稿进度&#xff1a;开源工具如何提升学术投稿效率 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 学术出版流程中&#xff0c;审稿进度的不确定性常给研究者带来困扰。Elsevier作为全球领先的学术出版…...

稚晖君亲自面试!智元机器人(Agibot)大模型技术面经全记录(含Transformer高频考点)

智元机器人(Agibot)大模型技术面试深度解析&#xff1a;Transformer核心考点与实战应答策略 当具身智能遇上大模型技术&#xff0c;一场关于未来机器人革命的对话正在顶尖科技公司的面试室里悄然展开。作为行业新锐的智元机器人(Agibot)&#xff0c;其技术面试不仅考察候选人的…...

提示工程架构师经验总结:Agentic AI环保项目从失败到成功的关键转折点

提示工程架构师经验总结:Agentic AI环保项目从失败到成功的关键转折点 一、引言:那些“死在落地路上”的环保AI 你知道吗? 全球每年有800万吨塑料流入海洋,相当于每秒钟往海里倒一辆卡车的垃圾;中国城市生活垃圾年清运量超过3亿吨,但仅有**23%**的垃圾得到规范分拣——…...

ReplaceItems.jsx:Adobe Illustrator批量对象替换的终极解决方案

ReplaceItems.jsx&#xff1a;Adobe Illustrator批量对象替换的终极解决方案 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Illustrator中重复的替换操作而烦恼吗&#xff1…...

PT工具效率革命:一站式解决PT站点种子管理难题

PT工具效率革命&#xff1a;一站式解决PT站点种子管理难题 【免费下载链接】PT-Plugin-Plus PT 助手 Plus&#xff0c;为 Microsoft Edge、Google Chrome、Firefox 浏览器插件&#xff08;Web Extensions&#xff09;&#xff0c;主要用于辅助下载 PT 站的种子。 项目地址: h…...

别再手动算置信区间了!ArcGIS里用Python脚本批量计算FVC,效率提升90%

遥感植被覆盖度自动化计算&#xff1a;用Python脚本解放ArcGIS生产力 当面对数百景遥感数据需要计算植被覆盖度(FVC)时&#xff0c;手动操作ArcGIS界面不仅耗时费力&#xff0c;还容易因人为失误导致结果不一致。我曾在一个省级生态评估项目中&#xff0c;需要处理3年共36期Lan…...

5步征服显存难题:多语言MiniLM模型量化优化实战指南

5步征服显存难题&#xff1a;多语言MiniLM模型量化优化实战指南 【免费下载链接】paraphrase-multilingual-MiniLM-L12-v2 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/paraphrase-multilingual-MiniLM-L12-v2 1. 诊断显存瓶颈 在部署paraphrase-multili…...

Wan2.2-I2V-A14B高性能实践:10核CPU+120GB内存协同优化视频推理稳定性

Wan2.2-I2V-A14B高性能实践&#xff1a;10核CPU120GB内存协同优化视频推理稳定性 1. 镜像概述与核心优势 Wan2.2-I2V-A14B是一款专为高性能文生视频任务优化的私有部署镜像&#xff0c;针对RTX 4090D 24GB显存显卡和10核CPU120GB内存配置进行了深度优化。这个镜像解决了视频生…...

从加速度传感器到Symbol生成:Cadence VerilogA建模避坑指南

从加速度传感器到Symbol生成&#xff1a;Cadence VerilogA建模避坑指南 在MEMS传感器设计领域&#xff0c;将物理量精确转化为可仿真的电学模型是每个硬件工程师必须掌握的技能。三明治式加速度传感器作为典型的多物理场耦合器件&#xff0c;其VerilogA行为级建模过程既考验工…...