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;
    }
    
}
相关推荐
电商API_1800790524716 分钟前
淘宝商品详情数据获取全方案分享
开发语言·前端·javascript
IT199516 分钟前
Java文档阅读笔记-AI LangChain4j - Agent Multiple Tools Calling Example
java·笔记·文档阅读
rlpp23 分钟前
spring.profiles.active和spring.profiles.include的使用及区别说明
java·后端·spring
Pluchon23 分钟前
硅基计划4.0 算法 简单实现B树
java·数据结构·b树·算法·链表
知无不研1 小时前
c++的设计模式(常用)
c++·观察者模式·单例模式·设计模式·简单工厂模式
whatever who cares1 小时前
Java Web 架构全组件详解
java·前端·架构
maplewen.1 小时前
C++11 返回值优化
开发语言·c++·面试
好家伙VCC1 小时前
**标题:发散创新|用Python构建GAN图像生成器:从理论到实战全流程解析**---在深度学习飞速发展的今天,**生成对抗
java·python·深度学习·生成对抗网络
我命由我123451 小时前
Android Studio - 在 Android Studio 中直观查看 Git 代码的更改
android·java·开发语言·git·java-ee·android studio·android jetpack
hewence11 小时前
Kotlin协程启动方式详解
android·开发语言·kotlin