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;
    }
}
相关推荐
zjxtxdy6 分钟前
R语言数据统计入门
开发语言·r语言
汤姆yu13 分钟前
基于springboot+vue的企业OA办公系统
java·spring boot·后端·oa办公
南归北隐18 分钟前
Spring AI Alibaba Graph框架实现RAG私有知识库问答
java·后端·spring·spring ai·java rag实现
cleble19 分钟前
怎么用用 PowerShell 下载文件
开发语言·php
w2sfot27 分钟前
AI时代,JS加密还有效吗?
开发语言·前端·javascript
yujunl29 分钟前
U9C WSS项目的学习成果
开发语言
从琳开始98931 分钟前
[JavaEE]多线程初阶(下篇)------多线程案例(单例模式,阻塞队列,线程池,定时器)
java·单例模式·java-ee
乌暮36 分钟前
# Spring 入门与 Spring MVC 实战指南:从零理解 IoC 到 RESTful 图书管理
java·开发语言·后端·学习·spring·mvc·restful
java1234_小锋37 分钟前
Spring Boot 4.0 官宣:弃用 Undertow
java·spring boot·后端
jyOverQ40 分钟前
Redis 主从复制、Sentinel 和 Cluster 到底有什么区别?
java·redis·sentinel