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;
    }
}
相关推荐
xiaoye-duck1 分钟前
C++ STL set 系列深度解析:从底层原理、核心接口到实战场景
开发语言·c++·stl
小涛不学习2 分钟前
Java高频面试题(带答案版)
java·开发语言
big_rabbit05022 分钟前
JVM堆内存查看命令
java·linux·算法
m0_662577974 分钟前
C++中的RAII技术深入
开发语言·c++·算法
学习要积极11 分钟前
Springboot图片验证码-EasyCaptcha
java·spring boot·后端
码云数智-园园14 分钟前
测试双雄:单元测试与集成测试的深度解析与实战指南
开发语言
故城、18 分钟前
Python进阶
开发语言·python
2401_8914821720 分钟前
C++代码复杂性分析
开发语言·c++·算法
C羊驼22 分钟前
C语言学习笔记(十):操作符
c语言·开发语言·经验分享·笔记·学习
李少兄22 分钟前
企业资源计划(ERP)系统全景指南
java·前端·数据库·erp