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

双检锁

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;
    }
}
相关推荐
我待_JAVA_如初恋2 小时前
解决:IDEA中右侧的Maven视图中多了Profiles这一项。并且Profiles下的JDK版本与实际使用版本不一致
java·maven·intellij-idea
Good_Starry2 小时前
Java——JUnit、单例设计模式、函数式编程Lambda
java
while(1){yan}2 小时前
Spring MVC请求基础
java·spring·mvc
IT_Octopus2 小时前
Java Protobuf+Zstd 压缩存储Redis实践&问题解决&对比Gzip压缩的大小和性能
java·开发语言·redis
网安_秋刀鱼2 小时前
【java安全】URL链拆解
java·开发语言·安全·web安全·网络安全
翻斗花园岭第一爆破手2 小时前
flutter2:Container的简介与尺寸
java·服务器·前端
二十雨辰2 小时前
[SSM]SpringMVC快速入门
java·spring
Seven972 小时前
动态规划
java
BF06242 小时前
EPICS Archiver Appliance部署Quickstart方式
java·tomcat