单例模式
最简单版(饿汉式)。 通过static的静态初始化方式,在该类第一次被加载的时候,该对象的实例就被创建出来了
public class Singleton { //实例化 private static Singleton instance = new Singleton(); //私有构造方法 private Singleton(){} //对外提供获取实例的静态方法 public static Singleton getInstance() { return instance; } }
第一种方式,如果较多的单例采用上述方式的话,可以回造成不必要的浪费。可采用另外两种方式来避免该种情况
静态内部类方式,通过显式调用方法是,才会装载单例对象,从而实例化
public class Singleton { //在静态内部类中初始化实例对象 private static class InnerSingleton { private static final Singleton instance = new Singleton(); } //私有构造方法 private Singleton(){} //获取实例的静态方法 public static Singleton getInstance() { return InnerSingleton.instance; } }
懒汉模式方式
public class Singleton { //实例 private static Singleton instance; //私有构造方法 private Singleton(){} //获取实例的静态方法 public static Singleton getInstance() { if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
} } return instance; } }
网上说序列化的情况下,可能会破坏单例,解决方法是重写readResolve方法。没有试验过
public class Singleton implements Serializable{
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
private Object readResolve() {
return singleton;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?