Java多线程--单例模式

一、饿汉模式

类加载的同时,创建实例

java 复制代码
class Singleton{
    private static Singleton instance new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return instance;
    }
}

二、懒汉模式-单线程版

类加载的时候不创建实例,第一次使用的时候才创建实例

java 复制代码
class Singleton{
    private static Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

三、懒汉模式-多线程版

上面的懒汉模式的实现是不安全的

加上synchronized可以改善这里的线程安全问题

java 复制代码
class Singleton{
    private static Singleton instance = null;
    private Singleton(){}
    public synchronized static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

四、懒汉模式-多线程版(改进)

  • 以下代码在加锁的基础上,做出了进一步的改动
  • 给instance加上volatile
java 复制代码
class Singleton{
    private static volatile Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance(){
        if(instance == null){
            synchronized(Singleton.calss){
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
相关推荐
皮皮林5515 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河5 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程8 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅10 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者11 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺11 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart12 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP13 小时前
MyBatis-mybatis入门与增删改查
java
孟陬16 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端