单例模式的几种实现方式

单例模式

单例模式是一种常见的设计模式,而关于单例模式的实现又有以下几种实现方式:饿汉单例,懒汉单例,双重校验锁,静态内部类等实现

饿汉单例

该懒汉单例是线程安全的,但是存在资源浪费的情况,在程序启动时就会创建该类的实例。

java 复制代码
/**
 * @author: dlwlrma
 * @data 2025年01月15日 16:34
 * @Description 单例模式之懒汉单例
 */
public class Singleton {

    //私有静态成员变量,在使用时才会创建实例
    private static Singleton instance = new Singleton();

    //私有构造方法
    private Singleton() {
    }
    
    //唯一的公共访问点
    public static Singleton getInstance(){
        return instance;
    }
}

懒汉单例

java 复制代码
/**
 * @author: dlwlrma
 * @data 2025年01月15日 16:40
 * @Description 懒汉单例
 */
public class Singleton {
    
    //私有静态成员变量,初始化为null
    private static Singleton instance = null;
    
    //私有构造器
    private Singleton() {
        
    }
    
    //获取唯一可用实例,先判断是否已经创建实例,如果没有创建,则创建实例
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

双重校验锁(DLC)

java 复制代码
/**
 * @author: dlwlrma
 * @data 2025年01月15日 16:50
 * @Description 双重校验锁
 */
public class Singleton {
    private volatile static Singleton instance = null;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

静态内部类

java 复制代码
/**
 * @author: dlwlrma
 * @data 2025年01月15日 16:55
 * @Description 静态内部类
 */
public class Singleton{
    private Singleton(){
        
    }
    
    private static class SingletonHolder{
        private static final Singleton instance = new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonHolder.instance;
    }
}
相关推荐
同学小张1 小时前
【端侧AI 与 C++】1. llama.cpp源码编译与本地运行
开发语言·c++·aigc·llama·agi·ai-native
踢球的打工仔2 小时前
PHP面向对象(7)
android·开发语言·php
S***26754 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
汤姆yu4 小时前
基于python的外卖配送及数据分析系统
开发语言·python·外卖分析
Yue丶越4 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
马剑威(威哥爱编程)4 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL4 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
翔云 OCR API4 小时前
人脸识别API开发者对接代码示例
开发语言·人工智能·python·计算机视觉·ocr
V***u4535 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿5 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台