实现单例模式的五种方式
如何实现一个单例
1、构造器需要私有化
2、提供一个私有的静态变量
3、暴露一个公共的获取单例对象的接口
需要考虑的两个问题
1、是否支持懒加载
2、是否线程安全
1、饿汉式
public class EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton();private EagerSingleton(){}public EagerSingleton getInstance(){return INSTANCE;}}
不支持懒加载
线程安全
2、懒汉式
public class LazySingleton {private static LazySingleton INSTANCE;private LazySingleton() {}public static LazySingleton getInstance() {if (INSTANCE == null) {INSTANCE = new LazySingleton();}return INSTANCE;}
}
支持懒加载
线程不安全
public class LazySingleton {private static LazySingleton INSTANCE;private LazySingleton() {}public static synchronized LazySingleton getInstance() {if (INSTANCE == null) {INSTANCE = new LazySingleton();}return INSTANCE;}
}
支持懒加载
线程安全
3、双重检查锁
public class DoubleCheckSingleton {private static DoubleCheckSingleton INSTANCE;private DoubleCheckSingleton() {}public DoubleCheckSingleton getInstance() {if (INSTANCE == null) {synchronized (DoubleCheckSingleton.class) {if (INSTANCE == null) {INSTANCE = new DoubleCheckSingleton();}}}return INSTANCE;}
}
支持懒加载
线程安全
4、静态内部类
public class InnerSingleton {private InnerSingleton() {}public static InnerSingleton getInstance() {return Singleton.INSTANCE;}private static class Singleton {private static final InnerSingleton INSTANCE = new InnerSingleton();}
}
支持懒加载
线程安全
5、枚举
public enum EnumSingleton {INSTANCE;
}
支持懒加载
线程安全
相关文章:
实现单例模式的五种方式
如何实现一个单例 1、构造器需要私有化 2、提供一个私有的静态变量 3、暴露一个公共的获取单例对象的接口 需要考虑的两个问题 1、是否支持懒加载 2、是否线程安全 1、饿汉式 public class EagerSingleton {private static final EagerSingleton INSTANCE new EagerSi…...
pcl源码分析之计算凸包
文章目录 前言一、应用案例二、源码分析1.ConvexHull类2.reconstruct函数3.performReconstruction 函数4.calculateInputDimension 函数 总结 前言 本文分析一下pcl里凸包的源码。什么是凸包以及怎么求解,可以了解一下概念。 一、应用案例 #include <pcl/surfa…...
在K8S中,Pod请求另一个Pod偶尔出现超市或延迟,如何排查?
在Kubernetes中,当Pod请求另一个Pod时偶尔出现超时或延迟,可能是由于多种原因造成的。以下是一些建立的排查步骤: 1. 检查网络配置和插件: 确认你的kubernetes集群使用了合适的网络插件(如Calico、Flannel等…...
3blue1brow线代笔记
向量 物理:空间中的箭头,长度和方向决定一个向量。只要两者相同,可以任意移动保持不变 计算机:有序的数字列表 (数组) 数学:向量可以是任何东西,只要保证两个向量相加以及数字与向量…...
【前端系列】优化axios响应拦截器
文章目录 一、前言🚀🚀🚀二、axios响应拦截器:☀️☀️☀️2.1 为什么前端需要响应拦截器element ui的消息组件 一、前言🚀🚀🚀 ☀️ 回报不在行动之后,回报在行动之中。 这个系列可…...
SQL使用视图
本文将介绍什么是视图,它们怎样工作,何时使用它们。 1. 视图 视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。 说明:SQLite 的视图 SQLite 仅支持只读视图,所以视图可以创建ÿ…...
在Windows计算机上打开 HEIC 文件的 6 种有效方法
如果您是 iPhone 用户,您可能对 HEIC 照片很熟悉。这种新兴格式是一种非常高效的图片编码器,它以小得多的尺寸提供至少类似 JPEG 的质量。这对于存储容量较小的手机尤其有利。但是,如何在Windows上打开 HEIC 文件? 假设您用 iDev…...
开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!
2025年新年临近,Apache SeaTunnel 社区用户案例精选📘也跟大家见面啦!在过去的时间里,SeaTunnel 社区持续成长,吸引了众多开发者的关注与支持。 为了致谢一路同行的伙伴,也为了激励更多人加入技术共创&…...
C# delegate 委托使用教程
什么是委托? 委托是定义方法签名的引用类型数据类型,可以定义委托的变量,就像其他数据类型一样,可以引用与委托具有相同签名的任何方法。 它允许方法作为参数传递,并允许事件驱动编程。它们提供了一种以类型安全的方…...
《机器学习》——数据标准化(0~1标准化,z标准化)
文章目录 数据标准化一、什么是标准化二、常用标准化0~1标准化z标准化 三、注意事项 数据标准化 一、什么是标准化 数据标准化是一种数据预处理技术,用于将数据按照一定的规则进行变换,使得不同特征或变量具有可比性和一致性。作用 消除量纲影响 在实际…...
如何监控和管理API接口的调用频率和并发量?
使用监控工具 APM(应用性能管理)工具 功能介绍:APM 工具如 New Relic、AppDynamics 等可以深入监控 API 的性能指标,包括调用频率、并发量、响应时间等。它们通过在应用程序中嵌入代理或使用无侵入式的监测方式,收集和…...
springboot+vue使用EasyCaptcha实现简单验证码
一、实现效果 springboot使用EasyCaptcha实现简单验证码,更多api和用法可以去github上查看EasyCaptcha: Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。 二、实现步骤 1、导入依赖 <!-- easy-captcha --&g…...
“善弈者”也需妙手,Oclean欧可林:差异化不是说说而已
作者 | 曾响铃 文 | 响铃说 俗话说,“牙痛不是病,痛起来要人命”。这话意思大家都知道,牙痛虽不是什么大病,可一旦发作却是极难忍受。 前几日,Oclean欧可林举办了一场AirPump A10氧气啵啵冲牙器新品品鉴会ÿ…...
Lianwei 安全周报|2025.1.2
以下是本周「Lianwei周报」,我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件,保证大家不错过本周的每一个重点! 政策/标准/指南最新动态 01 国家数据局等五部门印发《关于促进企业数据资源开发利用的意见》 为充分释放企业…...
吐卡机开发——指令合集—未来之窗行业应用跨平台架构
序号指令10A 09 02 01 01 0D DE20A 09 02 02 01 FD DE30A 09 02 03 01 6D DF40A 09 02 04 01 5D DD50A 09 02 05 01 CD DC60A 09 02 06 01 3D DC70A 09 02 07 01 AD DD80A 09 02 08 01 5D D890A 09 02 09 01 CD D9100A 09 02 10 01 5D D2110A 09 02 11 01 CD D3120A 09 02 12 0…...
C# 设计模式(创建型模式):单例模式
C# 设计模式(创建型模式):单例模式 1. 引言 在软件开发中,设计模式是解决常见问题的经典方法。单例模式(Singleton Pattern)是创建型设计模式中的一种,旨在确保某个类只有一个实例,…...
使用WebSocket 获取实时数据
回车发送数据,模拟服务器发送数据 效果图: 源码: <template><div><h1>WebSocket 实时数据</h1><input type"text" v-model"ipt" keyup.enter"sendMessage(ipt)"><div v-if…...
阿里云服务器上安装配置Logtail日志收集客户端
在当今的云计算时代,有效的日志管理对于监控、故障排查和性能优化至关重要。作为阿里云用户,您可以利用阿里云强大的日志服务(SLS)来管理您的日志。而Logtail,作为SLS的核心组件之一,在日志收集和传输中扮演着关键角色。本文将为您详细介绍如何在阿里云服务器上安装和配置…...
Java实现下载excel模板,并实现自定义下拉框
GetMapping("excel/download")ApiOperation(value "模板下载")public void getUserRecordTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException {OutputStream outputStream response.getOutputStream();InputStream…...
postgres docker安装
mkdir -p /root/postgresql/data docker pull postgres:14 docker run --privilegedtrue --name postgres -e POSTGRES_PASSWORD123456 -e ALLOW_IP_RANGE0.0.0.0/0 -p 5432:5432 -v /root/postgresql/data:/var/lib/postgresql/data -d postgres:14#地址:192.168.3…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
