【创建型】单例模式

单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等)

1. 饿汉式(静态常量)

缺点:可能造成内存浪费

  1. 构造器私有化
  2. 类静态成员变量
  3. 暴露静态公共方法 getInstance

2. 懒汉式(双重检验)

  1. 构造器私有

  2. 静态 volatile 成员变量

  3. 双重 if+synchronized

    public class Singleton {
    //构造器私有
    private Singleton() {
    }
    private static volatile Singleton instance;

    复制代码
     //双重检查
     public static Singleton getInstance() {
         if(instance == null) {
             synchronized (Singleton.class) {
                 if(instance == null) {
                     instance = new Singleton();
                 }
             }
         }
         return instance;
     }

    }

3. JDK 源码分析

java.lang.Runtime 就是典型的饿汉式单例

相关推荐
Z1Jxxx2 分钟前
整除整除整除
开发语言·c++·算法
廋到被风吹走3 分钟前
【Spring】AOP深度解析:代理机制、拦截器链与事务失效全解
java·spring·缓存
superman超哥3 分钟前
自定义迭代器的实现方法:深入Rust迭代器机制的核心
开发语言·后端·rust·编程语言·rust迭代器机制·自定义迭代器
2501_921649495 分钟前
主流金融数据API对比:如何获取精准、及时的IPO数据
开发语言·python·金融·restful
superman超哥7 分钟前
IntoIterator Trait的转换机制:解锁Rust迭代器生态的关键
开发语言·后端·rust·编程语言·rust trait·rust迭代器·trait转换机制
墨月白7 分钟前
【QT】 Lambda 表达式
开发语言·qt
没有天赋那就反复7 分钟前
JAVA length
java·开发语言·算法
逑之12 分钟前
C语言笔记13:数据在内存中的存储
c语言·开发语言·笔记
不会c嘎嘎13 分钟前
QT中的常用控件 (四)
开发语言·qt
bing.shao14 分钟前
AI在电商上架图片领域的应用
开发语言·人工智能·golang