单例模式_双检锁与静态内部类

双检锁

java 复制代码
class Solution {
    private volatile Solution instance;

    public Solution getInstance() {
        Solution temp = instance;
        if (temp == null) {
            synchronized (this) {
                if (temp == null) {
                    temp = instance = new Solution();
                }
            }
        }
        return temp;
    }
}

为什么需要使用 volatile

如果不使用 volatile,会发生什么

为什么使用 synchronized

不使用 synchronized 会发生什么

为什么要使用双重检查

为什么需要先判断再加锁

synchronized 能保证可见性,为什么还需要 volatile

静态内部类

java 复制代码
class Solution {
    private static class Holder {
        private static final Solution INSTANCE = new Solution();
    }

    public Solution getInstance() {
        return Holder.INSTANCE;
    }
}
相关推荐
Devin~Y7 分钟前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
蜡台12 分钟前
IDEA 一些 使用配置和插件
java·ide·intellij-idea
磊 子37 分钟前
redis详解2
java·spring boot·redis
白露与泡影37 分钟前
Java面试题库及答案解析(2026版)
java·开发语言·面试
程序员阿明1 小时前
spring boot3 集成jjwt(java-jwt)版本的
java·spring boot·python
bbq粉刷匠1 小时前
Java--剖析synchronized
java·开发语言
ayt0071 小时前
Netty AbstractNioChannel源码深度剖析:NIO Channel的抽象实现
java·数据库·网络协议·安全·nio
Gofarlic_OMS1 小时前
装备制造企业Fluent许可证成本分点典型案例
java·大数据·开发语言·人工智能·自动化·制造
码王吴彦祖1 小时前
顶象 AC 纯算法迁移实战:从补环境到纯算的完整拆解
java·前端·算法
开心码农1号2 小时前
Java rabbitMQ如何发送、消费消息、全套可靠方案
java·rabbitmq·java-rabbitmq