JAVA_单例模式

一定要掌握并且会白板默写的三种单例模式实现。

饿汉式:

java 复制代码
public class Singleton1 {
    // 必须private修饰
    private static final Singleton1 SINGLETON = new Singleton1();
    // 无参构造必须private
    private Singleton1(){}
    // 获取单例的方法,必须public且是静态方法
    public static Singleton1 getInstance(){
        return SINGLETON;
    }
}

懒汉式(双重检查):

java 复制代码
public class Singleton2 {
    // 必须是volatile修饰,保障单例共享变量的有序性和可见性
    private static volatile Singleton2 singleton2 = null;

    private Singleton2(){}

    public static Singleton2 getInstance(){
        if(singleton2 == null){
            synchronized (Singleton2.class){
                if(singleton2 == null){
                    // 这行代码,涉及到的执行操作分成多个步骤,必须保障机器指令的有序性,避免其它线程判断null时出现误判
                    singleton2 = new Singleton2();
                }
            }
        }
        return singleton2;
    }


}

静态内部类:

java 复制代码
public class Singleton3 {
    
    private Singleton3(){}
    
    private static class SingletonHolder{
        private static final Singleton3 SINGLETON = new Singleton3();
    }
    
    public static Singleton3 getInstance(){
        return SingletonHolder.SINGLETON;
    }
    
}
相关推荐
漫霂9 小时前
二叉树的翻转
java·数据结构·算法
语戚9 小时前
力扣 51. N 皇后:基础回溯、布尔数组优化、位运算全解(Java 实现)
java·算法·leetcode·力扣·剪枝·回溯·位运算
维度攻城狮9 小时前
pycallgraph2drawio:Python 调用链可视化 + Draw.io 自由编辑
开发语言·python·draw.io·graphviz
程序猿阿越9 小时前
Kafka4源码(三)Share Group共享组
java·后端·源码阅读
亦暖筑序9 小时前
让AI不再"一本正经胡说八道":Spring AI RAG与VectorStore源码全解
java·源码阅读
蒙奇·D·路飞-9 小时前
大模型时代下 Java 后端开发的技术重构与工程实践
java·开发语言·重构
wljy19 小时前
Qt入门(一)
开发语言·qt
ZK_H10 小时前
半导体工艺流程
java·c语言·开发语言·计算机网络·金融
计算机安禾10 小时前
【数据结构与算法】第39篇:图论(三):最小生成树——Prim算法与Kruskal算法
开发语言·数据结构·c++·算法·排序算法·图论·visual studio code
liliangcsdn10 小时前
sentence-transformer如何离线加载和使用模型
开发语言·前端·php