单例模式的初识

1.1基本概念

单例模式是一个设计模式,确保一个类只有一个实例,并提供一个全局访问点

场景:需要严格控制资源访问(数据库连接池,配置文件读取)

避免资源浪费和冲突

1.2实现方法

单例模型的实现方法分为:懒汉式,饿汉式

1.3饿汉式

饿汉式:在启动程序时,无论是否被使用,进行单例对象的初始化,

不需要线程安全

优点

不考虑多线程环境下的线程安全

缺点

浪费系统资源

代码

java 复制代码
package sigletondemo;
//单例模式
//饿汉式
public class Singleton {
    //定义静态
    private static Singleton instance = new Singleton();
    //私有的,构造方法
    private Singleton(){}
    //调用
    public static Singleton getInstance(){
        return instance;
    }

}

Text

java 复制代码
package sigletondemo;

public class Text1 {
    public static void main(String[] args) {
        //Singleton singleton = new Singleton();
        // 实例化一个singleton对象,用private定义,在类外,无法调用
        Singleton singleton = Singleton.getInstance();//只能通过类名调用

        //饿汉式 验证
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();
        System.out.println(singleton1 == singleton2);

    }
}

1.4懒汉式

懒汉式:延迟加载,随用随取,

需要线程安全

优点

节省资源,只有需要的时候才开始初始化

缺点

在多线程环境下,可能会出现竞态条件,需要额外的线程安全,

代码(还需优化)

java 复制代码
package sigletondemo;
//单例模式
//懒汉式,线程不安全
public class Singleton2 {
    //无赋值
    private static  Singleton2 instance;

    private Singleton2(){}

    public static Singleton2 getInstance() {
        if (instance == null) {
            instance = new Singleton2();
        }
        return instance;
    }
}

Text

java 复制代码
package sigletondemo;

public class Text2 {
    public static void main(String[] args) {
        //Singleton singleton = new Singleton();
        // 实例化一个singleton对象,用private定义,在类外,无法调用
        Singleton2 singleton = Singleton2.getInstance();//只能通过类名调用

        //懒汉式 验证
        Singleton2 singleton1 = Singleton2.getInstance();
        Singleton2 singleton2 = Singleton2.getInstance();
        System.out.println(singleton1 == singleton2);
    }
}
相关推荐
rannn_1115 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
leisoo80975 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
AI产品测评官6 小时前
突破系统割裂困局:2026企业级AI招聘架构如何迈向“原生全流程”?
大数据·微服务·架构
梦梦代码精6 小时前
连锁品牌数字化:从门店扩张到用户资产运营的技术底座
大数据·人工智能·低代码·docker·开源·代码规范
IKUN家族7 小时前
Spring IoC&DI
java·spring·rpc
山荷枝8 小时前
03-框架--Spring
java·后端·spring
ChaHae-In8 小时前
SpringBoot统一功能处理
java·spring boot·后端
沐梯子9 小时前
具身智能爆发前夜的“数据饥渴”:2026机器人数据采集产业链选型解析
大数据·人工智能·机器人
ltqvibe9 小时前
企业数智化中台的五层架构——AI框架为什么需要纵向贯通
大数据·人工智能·架构
coder!mq9 小时前
说几个常见的语法糖?
java·开发语言·算法