java中的单例模式

Java实现单例模式的几种方式:

1. 饿汉式(推荐,线程安全)

复制代码
public class Singleton {
    // 类加载时就初始化
    private static final Singleton INSTANCE = new Singleton();
    
    // 私有构造
    private Singleton() {
        // 防止反射攻击
        if (INSTANCE != null) {
            throw new RuntimeException("单例模式禁止反射创建");
        }
    }
    
    public static Singleton getInstance() {
        return INSTANCE;
    }
}

2. 静态内部类(推荐,懒加载)

复制代码
public class Singleton {
    private Singleton() {
        // 防止反射攻击
        if (InnerHolder.INSTANCE != null) {
            throw new RuntimeException("单例模式禁止反射创建");
        }
    }
    
    // 静态内部类
    private static class InnerHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    
    public static Singleton getInstance() {
        return InnerHolder.INSTANCE;
    }
}
  • 懒加载:只有调用getInstance()时才加载内部类

  • 线程安全:JVM保证类加载的线程安全

3. 双重检查锁(懒加载,线程安全)

复制代码
public class Singleton {
    // 必须加volatile,禁止指令重排序
    private static volatile Singleton instance;
    
    private Singleton() {
        // 防止反射攻击
        if (instance != null) {
            throw new RuntimeException("单例模式禁止反射创建");
        }
    }
    
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
相关推荐
AI+程序员在路上1 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble1 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin1 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy1 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
ss2731 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
try2find2 小时前
打印ascii码报错问题
java·linux·前端
014-code2 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库
Nicander2 小时前
多数据源下@transcation事务踩坑
java·后端
郑州光合科技余经理2 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php