JAVA设计模式——(八)单例模式

JAVA设计模式------(八)单例模式

介绍

确保一个类只存在一个实例。

理解

就是一个实例,new出来的一个,很简单。不过单例模式分为了懒汉式和饿汉式,其中也有线程安全的实现方式和线程不安全的实现方式。

实现

饿汉式

顾名思义,表现的十分饥饿,在一开始便实例化了一个对象。

关键点,创建一个private的构造函数,可以保证类之外不能实例化新的对象。该方式不存在线程安全问题。

java 复制代码
package cn.sh.designepattern;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/4/28 19:42
 * @Contact 643947568@qq.com
 */
public class Singleton {
    private static Singleton singleton = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return singleton;
    }
}

懒汉式

在需要的时候才创建对象并且返回这个对象。

下面的方法存在线程安全问题,不知道有没有发现。

java 复制代码
class Singleton01 {
    private static Singleton01 singleton01 = null;


    private Singleton01() {
    }


    public static Singleton01 getInstance() {

        if (singleton01 == null){    //----------------  1
            singleton01 = new Singleton01();       // -------------2
        }

        return singleton01;
    }

}

这种方式在调用getInstance()时存在并发问题,如何多个线程同时到了代码1中,并且刚好又都判断通过了,所以都会执行2,这时,导致两者使用的对象不相同了,就违背了单例的条件。

下面线程安全的,一次只允许一个线程访问getInstance()

java 复制代码
class Singleton01 {
    private static Singleton01 singleton01 = null;


    private Singleton01() {
    }


    synchronized public  static Singleton01 getInstance() {
        
        if (singleton01 == null){
            singleton01 = new Singleton01();
        }

        return singleton01;
    }

}

应用

懒汉式更多用于资源紧缺的系统,可以对未使用的类不提前初始化,从而节约了资源。

饿汉式则在系统启动时便初始化了类,适用一些需要初始便快速响应的系统。

相关推荐
武子康2 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
YuTaoShao5 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
源码_V_saaskw5 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
超浪的晨5 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
双力臂4046 小时前
Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
java·spring boot·后端·单元测试
Edingbrugh.南空6 小时前
Aerospike与Redis深度对比:从架构到性能的全方位解析
java·开发语言·spring
QQ_4376643147 小时前
C++11 右值引用 Lambda 表达式
java·开发语言·c++
永卿0017 小时前
设计模式-迭代器模式
java·设计模式·迭代器模式
使二颗心免于哀伤7 小时前
《设计模式之禅》笔记摘录 - 10.装饰模式
笔记·设计模式
誰能久伴不乏7 小时前
Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
java·服务器·前端