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

记录|单例模式小记

目录

  • 前言
  • 一、单例模式
    • 1.1 什么是单例模式
    • 1.2 常见单例模式
  • 二、单例模式对比
  • 更新时间


前言

参考文章:

去读队友写的代码的时候由于看不懂才去学习的。
一般情况下,这种是用于数据库的开销避免。
例如:

    public class DBConnectionManager{private static DBConnectionManager instance;private DBConnectionManager(){connection = new MySqlConnection(connString);}public static DBConnectionManager Instance{get{if (instance == null){instance = new DBConnectionManager();}return instance;}}}

一、单例模式

1.1 什么是单例模式

特点是在第一次使用时才创建实例。

1.2 常见单例模式

饿汉式单例模式、双重检查锁定(Double-Checked Locking)单例模式


二、单例模式对比

  • 饿汉式单例模式
    类加载时就完成了实例化。避免了同步问题。
    构造函数比较复杂,可能会造成资源浪费
public class Singleton {private static final Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}
  • 懒汉式单例模式:【这里用C#代码】
    双重检查锁定机制确保了多线程环境下的安全性
    实现懒汉式单例模式需要处理同步问题,增加了代码的复杂性。
public sealed class Singleton
{private static Singleton instance;private Singleton() { }public static Singleton Instance{get{if (instance == null){instance = new Singleton();}return instance;}}
}
  • 双重检查锁定 单例模式
    拥有饿汉式的优点,又保证了线程的安全,避免了不必要的同步开销。
public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

更新时间

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring表达式语言(SPEL)(05)
  • 51单片机-串口通信(单片机和PC互发数据)
  • 软件部署-Docker容器化技术
  • 探索Python的数学魔法:Numpy库的神秘力量
  • 二维空间向量的p范数等密度轨迹
  • 负载均衡--资源申请说明(三)
  • 基于苹果Vision Pro的AI NeRF方案:MetalSplatter
  • SpringBoot3+Vue3开发商店上货管理系统
  • WordPress上可以内容替换的插件
  • 漫谈设计模式 [16]:中介者模式
  • windows C++ 虚拟内存的按需调拨
  • Typora教程
  • 基于图谱的记忆存储 - mem0 graph memory + neo4j
  • FreeRTOS学习笔记(五)任务进阶篇
  • <Rust>egui学习之小部件(九):如何在窗口中添加下拉列表combobox部件?
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Fastjson的基本使用方法大全
  • JAVA SE 6 GC调优笔记
  • Joomla 2.x, 3.x useful code cheatsheet
  • Python3爬取英雄联盟英雄皮肤大图
  • Sass 快速入门教程
  • Sublime Text 2/3 绑定Eclipse快捷键
  • tensorflow学习笔记3——MNIST应用篇
  • WinRAR存在严重的安全漏洞影响5亿用户
  • Zsh 开发指南(第十四篇 文件读写)
  • 服务器从安装到部署全过程(二)
  • 聊聊flink的TableFactory
  • 盘点那些不知名却常用的 Git 操作
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 手写一个CommonJS打包工具(一)
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 你对linux中grep命令知道多少?
  • 正则表达式-基础知识Review
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #define
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (02)Unity使用在线AI大模型(调用Python)
  • (C++17) std算法之执行策略 execution
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (zhuan) 一些RL的文献(及笔记)
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .gitignore文件忽略的内容不生效问题解决
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core中如何集成RabbitMQ
  • .NET NPOI导出Excel详解
  • .NET Project Open Day(2011.11.13)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .Net程序帮助文档制作
  • .NET导入Excel数据
  • .net开发时的诡异问题,button的onclick事件无效