单例模式的五种实现方式

1、饿汉式

**①实现:**在类加载的时候就初始化实例

**②优点:**线程安全

**③缺点:**实例在类加载的时候创建,可能会浪费资源

java 复制代码
//饿汉式
public class EagerSingleton{
    
    private EagerSingleton(){}   //私有构造方法
    
    private static EagerSingleton instance = new EagerSingleton();

    public static EagerSingleton getInstance(){
        return instance;
    }
    
}

2、懒汉式

**①实现:**在首次获取实例的时候再创建实例

**②优点:**延迟加载,节省资源

**③缺点:**线程不安全

java 复制代码
public class LazySingleton{

    private LazySingleton(){}    //  私有构造方法

    private static LazySingleton instance;

    public static LazySingleton getInstance(){
        if(instance != null){
            instance = new LazySingleton();
        }
        return instance;
    }

}

3、双重检查锁

**①实现:**通过双重检查+加锁+volatile方式实现

**②优点:**线程安全

**③缺点:**稍微复杂

java 复制代码
public class DoubleCheckedSingleton{

    private DoubleCheckedSingleton(){}

    private static volatile DoubleCheckedSingleton instance;

    public static DoubleCheckedSingleton getInstance(){
        if(instance != null){
            sychronized (DoubleCheckedSingleton.class){
                if(instance != null){
                    instance = new DoubleCheckedSingleton();
                }
            }
        }
        return instance;
    }
 }

4、静态内部类

**①实现:**静态内部类创建示例

**②优点:**线程安全

**③缺点:**无法通过参数构造实例

java 复制代码
public class InnerClassSingleton{
    
    private InnerClassSingleton(){}

    private static class SingletonHolder{
        private static final InnerClassSingleton instance = new InnerClassSingleton();
    }
    
    public static InnerClassSingleton getInstance(){
        return SingletonHolder.instance;
    }
}

5、枚举

**①实现:**通过枚举类型天然的单例特性实现

**②优点:**线程安全、代码简洁、防止反射和序列化破坏单例

**③缺点:**属于饿汉式,会浪费资源

java 复制代码
public emun EnumSingleton{
    INSTANCE;
}

Runtime类就是通过饿汉式的方式实现的单例模式

相关推荐
0110_10246 分钟前
tauri + rust的环境搭建---初始化以及构建
开发语言·后端·rust
会开花的二叉树8 分钟前
C++微服务 UserServer 设计与实现
开发语言·c++·微服务
像风一样自由202011 分钟前
Rust Tokio vs Go net/http:云原生与嵌入式生态选型指南
开发语言·golang·rust
DuHz13 分钟前
C程序中的数组与指针共生关系
linux·c语言·开发语言·嵌入式硬件·算法
我星期八休息16 分钟前
C++智能指针全面解析:原理、使用场景与最佳实践
java·大数据·开发语言·jvm·c++·人工智能·python
摇滚侠17 分钟前
Spring Boot 3零基础教程,WEB 开发 整合 Thymeleaf 笔记36
java·spring boot·笔记
大猫会长21 分钟前
docker安装php+apache
java·开发语言
野生技术架构师23 分钟前
JAVA 架构师面试题含答案:JVM+spring+ 分布式 + 并发编程
java·jvm·spring
道之极万物灭35 分钟前
Go小工具合集
开发语言·后端·golang
瑞士卷@35 分钟前
MyBatis入门到精通(Mybatis学习笔记)
java·数据库·后端·mybatis