spring设计模式-单例模式
单例模式是指确保一个类在任何情况下都绝对只有一个实例并提供一个全局访问点。单例模式是创建型模式懒汉式单例模式在类加载的时候就立即初始化并且创建为单例对象它绝对线程安全线程还没出现的时候就实例化了不可能存在访问安全问题。优点没有加任何锁执行效率比较高用户体验比懒汉式单例模式更好缺点类加载的时候就初始化不管用不用都占着空间浪费了内存。饿汉式 public class HungrySingleton { private static HungrySingleton hungrySingletonnew HungrySingleton(); //另一种写法 private static HungrySingleton hungrySingleton1; static{ hungrySingleton1new HungrySingleton(); } private HungrySingleton(){} public static HungrySingleton getInstance(){ return hungrySingleton; } } 懒汉式 /** * 特点被外部类调用的时候内部类才会被加载.缺点线程不安全 */ public class LazySingleton { private LazySingleton(){} private static LazySingleton lazySingletonnull; public static LazySingleton getInstance(){ if (lazySingletonnull){ lazySingletonnew LazySingleton(); } return lazySingleton; } //方法一线程不安全的办法加锁,缺点性能下降 public static synchronized LazySingleton getInstance1(){ if (lazySingletonnull){ lazySingletonnew LazySingleton(); } return lazySingleton; } //方法二双重检验所解决线程安全和性能问题(双重检验锁 public static LazySingleton getInstance2(){ if(lazySingletonnull){ synchronized (LazySingleton.class){ if(lazySingletonnull){ lazySingletonnew LazySingleton(); //1、分配内存给这个对象 //2、初始化对象 //3、设置lazysingleton指向刚分配的内存地址 } } } return lazySingleton; } } 内部类 package com.wanda.singleton; import java.lang.reflect.Constructor; /** * 这种形式兼顾了饿汉式内存浪费问题和synchronized性能问题 */ public class LazyInnerSingleton { // private LazyInnerSingleton(){} //修改后的构造方法 private LazyInnerSingleton(){ if(LazyHolder.lazy!null){ throw new RuntimeException(不允许创建多个实例); } } public static final LazyInnerSingleton getInstance(){ return LazyHolder.lazy; } //内部类在方法调用之前初始化避免了线程不安全的问题 private static class LazyHolder{ private static final LazyInnerSingleton lazynew LazyInnerSingleton(); } public static void main(String[] args) { //反射破坏单例情况,通过这种方式会创建两个不同的单例。可以在构造方法中做一些限制一旦多次重复创建就抛出异常。 try { Class? clazzLazyInnerSingleton.class; Constructor constructorclazz.getDeclaredConstructor(null); //强制访问 constructor.setAccessible(true); Object o1constructor.newInstance(); Object o2constructor.newInstance(); System.out.println(o1o2); }catch (Exception e){ e.printStackTrace(); } } } 序列化破坏单例 package com.wanda.singleton; import java.io.*; //一个单例对象创建后有时需要序列化到磁盘下次使用时在从磁盘读入进行反序列化反序列华的对象会重新分配内存 //即重新创建如果序列化的对象是单例就违背了单例的意义。 public class SeriableSingleton implements Serializable { public static final SeriableSingleton INSTANCEnew SeriableSingleton(); private SeriableSingleton(){} public static SeriableSingleton getInstance(){ return INSTANCE; } private Object readResolve(){ return INSTANCE; } public static void main(String[] args) { SeriableSingleton s1null; SeriableSingleton s2SeriableSingleton.getInstance(); FileOutputStream fosnull; try { fosnew FileOutputStream(seriablesingleton.obj); ObjectOutputStream osnew ObjectOutputStream(fos); os.writeObject(s2); os.flush(); os.close(); FileInputStream fisnew FileInputStream(seriablesingleton.obj); ObjectInputStream oisnew ObjectInputStream(fis); s1(SeriableSingleton) ois.readObject(); ois.close(); System.out.println(s1); System.out.println(s2); System.out.println(s1s2);//false 解决方法加上readResolve方法 }catch (Exception e){ } } } 枚举 package com.wanda.singleton; import java.io.*; //一个单例对象创建后有时需要序列化到磁盘下次使用时在从磁盘读入进行反序列化反序列华的对象会重新分配内存 //即重新创建如果序列化的对象是单例就违背了单例的意义。 public class SeriableSingleton implements Serializable { public static final SeriableSingleton INSTANCEnew SeriableSingleton(); private SeriableSingleton(){} public static SeriableSingleton getInstance(){ return INSTANCE; } private Object readResolve(){ return INSTANCE; } public static void main(String[] args) { SeriableSingleton s1null; SeriableSingleton s2SeriableSingleton.getInstance(); FileOutputStream fosnull; try { fosnew FileOutputStream(seriablesingleton.obj); ObjectOutputStream osnew ObjectOutputStream(fos); os.writeObject(s2); os.flush(); os.close(); FileInputStream fisnew FileInputStream(seriablesingleton.obj); ObjectInputStream oisnew ObjectInputStream(fis); s1(SeriableSingleton) ois.readObject(); ois.close(); System.out.println(s1); System.out.println(s2); System.out.println(s1s2);//false 解决方法加上readResolve方法 }catch (Exception e){ } } } 容器式 package com.wanda.singleton; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 容器式单例模式:非线程安全 */ public class ContainerSingleton { private ContainerSingleton(){} private static MapString,Object mapnew ConcurrentHashMap(); public static Object getBean(String clazzName){ synchronized (map){ if(!map.containsKey(clazzName)){ Object objnull; try{ objClass.forName(clazzName).newInstance(); map.put(clazzName,obj); }catch (Exception e){ e.printStackTrace(); } return obj; }else{ return map.get(clazzName); } } } }

相关新闻

5分钟掌握OBS多平台直播推流:obs-multi-rtmp插件完整配置指南

5分钟掌握OBS多平台直播推流:obs-multi-rtmp插件完整配置指南

5分钟掌握OBS多平台直播推流:obs-multi-rtmp插件完整配置指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾为多平台直播而烦恼?想要同时在YouTube、B…

2026/7/28 15:21:23阅读更多 →
5分钟构建智能金融数据管道:Python量化分析的新利器

5分钟构建智能金融数据管道:Python量化分析的新利器

5分钟构建智能金融数据管道:Python量化分析的新利器 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 想象一下,你正在为量化策略寻找数据源,面对复杂API文档和繁琐的爬虫代码&am…

2026/7/28 15:19:22阅读更多 →
物联网设备低功耗设计:NBM7100A与dsPIC30F3014优化方案

物联网设备低功耗设计:NBM7100A与dsPIC30F3014优化方案

1. 项目背景与核心挑战在物联网设备设计中,电源管理始终是决定系统可靠性和使用寿命的关键因素。NBM7100A与dsPIC30F3014的组合方案,正是针对不可充电初级电池(如锂亚硫酰氯电池)供电场景的优化设计。这类电池虽然能量密度高、自放…

2026/7/28 15:19:22阅读更多 →
【Springboot毕设全套源码+文档】基于SpringBoot的智慧物业管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】基于SpringBoot的智慧物业管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/28 16:29:50阅读更多 →
Add Binary (67)

Add Binary (67)

这也是经典题。忘了return需要是个string了。 另外忘了a,或者b过界之后,av,bv应该是0. 老了。 最后返回的时候,需要把list里面的数打包成string ‘’.join([str(i) for i in result]). result里面还是数,要重新搞个lis…

2026/7/28 16:29:50阅读更多 →
物联网设备电池寿命优化:NBM7100A与PIC32MZ的协同设计

物联网设备电池寿命优化:NBM7100A与PIC32MZ的协同设计

1. 项目背景与核心挑战在物联网设备和便携式电子产品的设计中,初级电池(不可充电电池)的寿命优化一直是个棘手问题。我曾参与过一个野外监测项目,设备需要在不更换电池的情况下持续工作5年以上。最初使用常规方案时,电…

2026/7/28 16:29:50阅读更多 →
linux shell 各种括号作用详解()、(())、[]、[[]]、{}

linux shell 各种括号作用详解()、(())、[]、[[]]、{}

一、小括号,圆括号() 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令…

2026/7/28 16:29:50阅读更多 →
C++ noexcept关键字:从移动语义到容器性能优化的核心机制

C++ noexcept关键字:从移动语义到容器性能优化的核心机制

1. 项目概述:为什么我们需要 noexcept ? 在C的世界里,异常安全是一个老生常谈却又常谈常新的话题。当你辛辛苦苦写了一个类,确保它在抛出异常时资源不会泄漏(基本保证),甚至操作能保持原子性&…

2026/7/28 16:29:50阅读更多 →
AR-1106声源定位模组:TDOA算法原理与舵机联动控制的系统设计分析

AR-1106声源定位模组:TDOA算法原理与舵机联动控制的系统设计分析

背景:声源定位在智能感知系统中的需求在视频会议、监控跟随和机器人交互等应用中,系统不仅需要采集清晰的语音,还需要知道说话人在空间中的方位,以便驱动摄像头或机器人舵机将视野对准说话人。声源定位(Direction of A…

2026/7/28 16:27:49阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →