【创建型】单例模式

单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、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 就是典型的饿汉式单例

相关推荐
清霜之辰4 分钟前
详解 kotlin 相对 Java 特有的关键字及使用
android·java·kotlin
江沉晚呤时6 分钟前
深入解析策略模式在C#中的应用与实现
java·服务器·开发语言·前端·.netcore
居然是阿宋7 分钟前
Kotlin 中的 `reified` 关键字全解析:保留类型信息 + 优化高阶函数的双重魔法
android·开发语言·kotlin
Hamm9 分钟前
如何在TypeScript里使用类封装枚举来实现Java的枚举形参倒置
java·前端·typescript
mikey棒棒棒26 分钟前
使用RabbitMQ实现异步秒杀
java·分布式·rabbitmq·mq
无情的搬砖机器27 分钟前
idea 打不开terminal
java·ide·intellij-idea
avi911128 分钟前
问问lua怎么写DeepSeek,,,,,
java·junit·lua·deepseek
安迪小宝42 分钟前
python基础语法13-装饰器
开发语言·前端·python
小八四爱吃甜食42 分钟前
【R语言绘图】圈图绘制代码
开发语言·r语言
残月只会敲键盘43 分钟前
C++ Lambda表达式简明指南:新手快速上手
开发语言·c++