当前位置: 首页 > news >正文

实现单例模式的五种方式

如何实现一个单例

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}

支持懒加载

线程安全

http://www.lryc.cn/news/514790.html

相关文章:

  • pcl源码分析之计算凸包
  • 在K8S中,Pod请求另一个Pod偶尔出现超市或延迟,如何排查?
  • 3blue1brow线代笔记
  • 【前端系列】优化axios响应拦截器
  • SQL使用视图
  • 在Windows计算机上打开 HEIC 文件的 6 种有效方法
  • 开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!
  • C# delegate 委托使用教程
  • 《机器学习》——数据标准化(0~1标准化,z标准化)
  • 如何监控和管理API接口的调用频率和并发量?
  • springboot+vue使用EasyCaptcha实现简单验证码
  • “善弈者”也需妙手,Oclean欧可林:差异化不是说说而已
  • Lianwei 安全周报|2025.1.2
  • 吐卡机开发——指令合集—未来之窗行业应用跨平台架构
  • C# 设计模式(创建型模式):单例模式
  • 使用WebSocket 获取实时数据
  • 阿里云服务器上安装配置Logtail日志收集客户端
  • Java实现下载excel模板,并实现自定义下拉框
  • postgres docker安装
  • 数据库原理与应用期末复习
  • 数据库知识汇总2
  • CS·GO搬砖流程详细版
  • 《长寿养生报》是科普报刊吗?参与评选的科普作品需要注意什么?
  • React native 原生环境搭建(最新版本RN环境搭建,不是expo)
  • Unity Excel转Json编辑器工具
  • XML结构快捷转JSON结构API集成指南
  • 数据挖掘——支持向量机分类器
  • ImageNet 2.0?自动驾驶数据集迎来自动标注新时代
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之11 方案再探之2 项目文件(修改稿1)
  • 详解MySQL SQL删除(超详,7K,含实例与分析)