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;
    }
    
}
相关推荐
彬彬醤3 分钟前
如何正确选择住宅IP?解析适配跨境、流媒体的网络工具
服务器·开发语言·网络·网络协议·tcp/ip
重生之我是Java开发战士7 分钟前
【Java EE】快速上手Spring Boot
java·spring boot·java-ee
從南走到北7 分钟前
JAVA国际版一对一视频交友视频聊天系统源码支持H5 + APP
java·微信·微信小程序·小程序·音视频·交友
Yeats_Liao20 分钟前
Go Web 编程快速入门 06 - 响应 ResponseWriter:状态码与头部
开发语言·后端·golang
chao18984420 分钟前
C#模拟鼠标键盘操作的多种实现方案
开发语言·c#·计算机外设
mit6.82422 分钟前
[Agent可视化] 编排工作流(Go) | Temporal引擎 | DAG调度器 | ReAct模式实现
开发语言·后端·golang
go__Ahead22 分钟前
【Java-JMM】Happens-before原则
java
Devil枫26 分钟前
HarmonyOS鸿蒙应用:仓颉语言与JavaScript核心差异深度解析
开发语言·javascript·ecmascript
惺忪979837 分钟前
回调函数的概念
开发语言·前端·javascript
pcm12356744 分钟前
java中的单例模式
java·开发语言·单例模式