单例设计模式 - 《Head First 设计模式》
单例设计模式:确保一类只有一个实例,并提供一个全局访问点。
应用场景: 线程池、缓存、日志对象、注册表设置等
多线程下同步全局实例获取的方法
public class Singleton{ private static Singleton singleton = null; private Singleton(){} // synchronized修饰该方法虽然让各个线程互斥的访问此方法解决多线程下线程不安全的问题但是来带来了性能上的问题 // 真正需要同步的只有第一次创建实例的时候 private static synchronized Singleton getInstance(){ singleton = new Singleton(); return singleton; } }
多线程下懒加载模式的优化
双重检查锁的单例模式,首先检查实例是否创建如果未创建,才进行同步,这样一来只有真正创建单例的时候才会进行同步操作。
public class Singleton{ private volatile static Singleton singleton = null; // volatile关键字的作用 1.保证变量可见性 2.保证变量有序性 private Singleton(){} private static Singleton getInstance(){ if(singleton == null){ // 第一次判空,检查实例是否存在如果不存在再进入同步块 synchronized(Singleton.class){ if(singleton == null){ // 第二次判空,检查实例是否存在,如果仍然为null,则创建实例 singleton = new Singleton(); } } } return Singleton; } }
学而不思则罔,思而不学则殆!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具