单例模式(Java实现)
我的相关文章:
JavaSE 学习记录-CSDN博客
多线程笔记-CSDN博客
单例模式(Java实现)-CSDN博客
JUC笔记-CSDN博客
注解与反射(Java,类加载机制,双亲委派机制)-CSDN博客
1. 懒汉式线程不安全
public class LazyUnsafeSingleton {private static LazyUnsafeSingleton singleton;private LazyUnsafeSingleton(){}public static LazyUnsafeSingleton getInstance() {if (singleton == null) singleton = new LazyUnsafeSingleton();return singleton;}
}
2. 饿汉式(线程安全)
public class HungrySingleton {private static HungrySingleton singleton = new HungrySingleton();private HungrySingleton(){}public static HungrySingleton getInstance() {return singleton;}
}
3. 懒汉式线程安全
volatile
synchronized
public class LazySafeSingleton {private static volatile LazySafeSingleton singleton;private LazySafeSingleton(){}public static synchronized LazySafeSingleton getInstance() {if (singleton == null) singleton = new LazySafeSingleton();return singleton;}
}
4. 双重检查锁
public class DoubleCheckedLockSingleton {private static volatile DoubleCheckedLockSingleton singleton;private DoubleCheckedLockSingleton(){}public static DoubleCheckedLockSingleton getInstance() {if (singleton == null) {synchronized (DoubleCheckedLockSingleton.class) {if (singleton == null) {singleton = new DoubleCheckedLockSingleton();}}}return singleton;}
}
5. 静态内部类
public class StaticInnerClassSingleton {private static StaticInnerClassSingleton singleton;private static class SingletonHolder {private static StaticInnerClassSingleton INSTANCE = new StaticInnerClassSingleton();}public static StaticInnerClassSingleton getInstance() {return SingletonHolder.INSTANCE;}
}
6. 枚举类型
public enum EnumSingleton {SINGLETON;public String doSomeThing() {return "hello world";}
}
测试类
public class SingletonTest {public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, InterruptedException {// 1. 懒汉式线程非安全LazyUnsafeSingleton lazyUnsafeSingleton = LazyUnsafeSingleton.getInstance();// 2. 饿汉式HungrySingleton hungrySingleton = HungrySingleton.getInstance();// 3. 懒汉式线程安全LazySafeSingleton lazySafeSingleton = LazySafeSingleton.getInstance();// 4. 双重检查锁DoubleCheckedLockSingleton doubleCheckedLockSingleton = DoubleCheckedLockSingleton.getInstance();// 5. 静态内部类StaticInnerClassSingleton staticInnerClassSingleton = StaticInnerClassSingleton.getInstance();// 6. 枚举类型EnumSingleton enumSingleton = EnumSingleton.SINGLETON;enumSingleton.doSomeThing();// 反射无法破坏枚举类型的单例模式Class<EnumSingleton> enumSingletonClass = EnumSingleton.class;
// Constructor<EnumSingleton> declaredConstructor = enumSingletonClass.getDeclaredConstructor();Constructor<?> declaredConstructor = enumSingletonClass.getDeclaredConstructors()[0];declaredConstructor.setAccessible(true);Object enumSingleton1 = declaredConstructor.newInstance(); // java.lang.IllegalArgumentException// 7. 反射破坏非枚举类型的单例模式// (1)获取 Singleton 类的 Class 对象Class<LazyUnsafeSingleton> lazyUnsafeSingletonClass = LazyUnsafeSingleton.class;// (2)获取 Singleton 类的私有构造函数Constructor<LazyUnsafeSingleton> constructor = lazyUnsafeSingletonClass.getDeclaredConstructor();// (3)设置私有构造函数的可访问性constructor.setAccessible(true);// (4)使用私有构造函数创建新的实例LazyUnsafeSingleton lazyUnsafeSingletonFromReflect = constructor.newInstance();// 打印新创建的实例和原始实例是否相等System.out.println("Original Instance: " + LazyUnsafeSingleton.getInstance());System.out.println("New Instance: " + lazyUnsafeSingletonFromReflect);System.out.println("Are instances equal? " + (LazyUnsafeSingleton.getInstance() == lazyUnsafeSingletonFromReflect));}
}
相关文章:
单例模式(Java实现)
我的相关文章: JavaSE 学习记录-CSDN博客 多线程笔记-CSDN博客 单例模式(Java实现)-CSDN博客 JUC笔记-CSDN博客 注解与反射(Java,类加载机制,双亲委派机制)-CSDN博客 1. 懒汉式线程不安全 pu…...
24.面向对象六大原则
目录介绍 00.面向对象六大原则01.代码单一职责原则02.代码开放封闭原则03.代码里氏替换原则04.代码依赖倒置原则05.代码接口隔离原则06.代码迪米特原则00.面向对象六大原则 六大原则一句话介绍 单一职责原则:指一个类的功能要单一,不能包罗万象。开放封闭原则:指一个模块在扩…...
Vue3-shallowRef与shallowReactive
shallowRef 作用:创建一个响应式数据,但只对顶层属性进行响应式处理。 用法: let myVar shallowRef(initialValue);特点:只跟踪引用值的变化,不关心值内部的属性变化。 shallowReactive 作用:创建一个浅…...
CI/CD(基于ESP-IDF)
主要参考资料 B站乐鑫信息科技《【乐鑫全球开发者大会】DevCon23 #15 |通过 CI/CD 进行流水线开发》 pytest-embedded乐鑫文档: https://docs.espressif.com/projects/pytest-embedded/en/latest/api.html 目录 CI/CD简介乐鑫内部CI/CD测试GitLab CI/CDGitHub Actio…...
聚观早报 | 东风奕派eπ008将上市;苹果Vision Pro发布会
聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 6月3日消息 东风奕派eπ008将上市 苹果Vision Pro发布会 特斯拉Model 3高性能版开售 小米14推送全新澎湃OS系统 …...
k8s牛客面经篇
k8s的pod版块: k8s的网络版块: k8s的deployment版块: k8s的service版块: k8s的探针板块: k8s的控制调度板块: k8s的日志监控板块: k8s的流量转发板块: k8s的宏观版块:...
第9周 基于MinIO与OSS实现分布式与云存储
第9周 基于MinIO与OSS实现分布式与云存储 1. 基于mybatis-plus数据修改非空属性忽略更新2. 文件上传3. 分布式文件存储3.1 文件存储架构演变4. Minio docker安装5. 文件服务整合minio依赖minio API测试yml配置minio信息minio配置类业务:上传文件6. 云存储阿里OSS:要钱6.1 依赖6…...
【Linux内核-编程指南】
■ IPC组件 添加链接描述 ■ ■ ■ ■ ■...
Go 编程风格指南 - 最佳实践
Go 编程风格指南 - 最佳实践 原文:https://google.github.io/styleguide/go 概述 | 风格指南 | 风格决策 | 最佳实践 注意: 本文是 Google Go 风格 系列文档的一部分。本文档是 规范性(normative) 但不是强制规范(canonical),并且从属于Goo…...
awk的应用
步骤一:awk的基本用法 1)基本操作方法 格式1:awk [选项] [条件]{指令} 文件 格式2:前置指令 | awk [选项] [条件]{指令} 其中,print 是最常用的编辑指令;若有多条编辑指令,可用分号分隔。 …...
【网络原理】HTTP|认识请求“报头“|Host|Content-Length|Content-Type|UA|Referer|Cookie
目录 认识请求"报头"(header) Host Content-Length Content-Type User-Agent(简称UA) Referer 💡Cookie(最重要的一个header,开发&面试高频问题) 1.Cookie是啥? 2.Cookie怎么存的? …...
深入React Hoooks:从基础到自定义 Hooks
使用 useContext useContext 是另一个常用的 Hook,它可让我们在函数组件中轻松访问 React 的 context。如果你的应用程序依赖于一些全局状态,或者你希望避免将 props 一层一层地传递到子组件,context 很有用。你可以在父组件设置一个值&…...
9.7 Go语言入门(映射 Map)
Go语言入门(映射 Map) 目录六、映射 Map1. 声明和初始化映射1.1 使用 make 函数1.2 使用映射字面量 2. 映射的基本操作2.1 插入和更新元素2.2 访问元素2.3 检查键是否存在2.4 删除元素2.5 获取映射的长度 3. 遍历映射4. 映射的注意事项4.1 映射的零值4.2…...
过期视频怎么恢复?如何从手机、电脑和其他设备中恢复?
过期视频是指那些被误删、丢失或因系统升级等原因而无法正常访问的视频文件。这些视频可能包含了我们珍贵的回忆、重要的信息或者具有商业价值的内容。过期视频的恢复可以帮助我们找回失去的数据,减少损失,提高工作效率和生活质量。过期视频怎么恢复&…...
LeetCode刷题第2题
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …...
mysql执行拼接的sql语句
在MySQL中,可以使用 CONCAT() 函数来拼接SQL语句。但是,请注意,直接拼接SQL语句可能会导致SQL注入问题,因此应当使用参数化查询来避免这个问题。 以下是一个使用 CONCAT() 函数拼接SQL语句的例子: SET tableName us…...
使用 pm2 或 screen 等工具来管理和后台运行你的 Node.js 应用
使用 pm2 或 screen 等工具来管理和后台运行你的 Node.js 应用。 使用 pm2 pm2 是一个用于 Node.js 应用的进程管理工具,提供了守护进程、日志管理和应用重启等功能。 安装 pm2: npm install pm2 -g启动你的 Node.js 应用: pm2 start se…...
leetcode4 寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输出:2.00000 解释&a…...
水库大坝安全监测系统建设方案
一、背景 随着自动化技术的进步,大部分水库大坝不同程度地实现了安全监测自动化。但仍存在以下问题: 1、重建轻管,重视安全监测系统建设,不够重视运行维护。 2、缺乏系统性、综合性及相关性的资料分析功能。 3、软件大多为数据…...
单片机的内存映射和重映射
内存映射 在单片机内,不管是RAM还是ROM还是寄存器,他们都是真实存在的物理存储器,为了方便操作,单片机会给每一个存储单元分配地址,这就叫做内存映射。 单片机的内存映射是指将外部设备或外部存储器映射到单片…...
单片机产品设计全流程与实战经验分享
1. 单片机产品设计全流程解析作为一名在嵌入式领域摸爬滚打多年的硬件工程师,我经手过从智能家居到医疗设备的各类单片机项目。今天想系统梳理一下用单片机设计产品的完整流程,特别是那些教科书不会告诉你的实战经验。单片机之所以成为现代电子产品的核心…...
OpenClaw多任务测试:Qwen3-32B在RTX4090D上的并行处理极限
OpenClaw多任务测试:Qwen3-32B在RTX4090D上的并行处理极限 1. 测试背景与动机 最近在折腾本地AI自动化时,遇到一个实际问题:当OpenClaw同时处理多个任务时,显存会成为瓶颈吗?我手头正好有台配备RTX4090D(…...
PicoBricks-for-ESP32库详解:面向教育的ESP32硬件抽象封装
1. 项目概述PicoBricks-for-ESP32 是 Robotistan 官方发布的 Arduino 兼容库,专为 ESP32 微控制器平台设计,用于驱动 PicoBricks 教育开发板。该库并非通用硬件抽象层,而是面向特定硬件拓扑的垂直集成方案——其核心价值在于将 PicoBricks 板…...
STM8 Bootloader开发与固件远程升级实践
1. Bootloader的核心价值与应用场景在嵌入式产品开发中,Bootloader的重要性经常被低估。直到去年参与某工业控制器项目时,我才真正体会到它的价值——当时现场有200台设备需要紧急修复通信协议漏洞,但设备外壳采用防水密封设计,拆…...
终极指南:如何为NSFWJS集成Sentry实现高效错误监控与异常跟踪
终极指南:如何为NSFWJS集成Sentry实现高效错误监控与异常跟踪 【免费下载链接】nsfwjs NSFW detection on the client-side via TensorFlow.js 项目地址: https://gitcode.com/gh_mirrors/ns/nsfwjs NSFWJS是一个基于TensorFlow.js的客户端不良内容检测库&am…...
nas-tools与Emby/Plex无缝对接:构建家庭影院媒体中心的完美方案
nas-tools与Emby/Plex无缝对接:构建家庭影院媒体中心的完美方案 【免费下载链接】nas-tools NAS媒体库管理工具 项目地址: https://gitcode.com/gh_mirrors/nas/nas-tools nas-tools是一款功能强大的NAS媒体库管理工具,它能够与Emby、Plex等主流媒…...
标书制作入门
电子标书时代来了,但很多中小企业还在用老方法踩坑🕳️ 伟发标书10年经验,今天说点大实话👇一、电子标书不是"纸质版扫描件"📄 很多人以为电子标书就是把纸质文件转成PDF,大错特错❌ 真正的电子标…...
SEO和SEM分别适合哪些具体的营销目标_如何平衡SEO和SEM的投入
SEO和SEM分别适合哪些具体的营销目标 在当今数字化营销的时代,SEO(搜索引擎优化)和SEM(搜索引擎营销)是两种非常重要的工具。它们各有其独特的优势和适用场景,理解它们的不同之处,有助于我们在…...
AI 智能体可以成为你的科研助理?
想象一下,你的实验室里来了一群"AI 实习生"——它们不用睡觉、不会犯错、能同时读 100 篇论文、还能自己设计实验。这不是科幻电影,而是 2026 年 Nature Biotechnology 最新发表的"Agentic AI"(智能体 AI)正在…...
猫抓Cat-Catch:5步掌握浏览器资源嗅探的终极指南
猫抓Cat-Catch:5步掌握浏览器资源嗅探的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常在网页上看到喜欢的视频却无…...
