单例模式的初识

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);
    }
}
相关推荐
延凡科技4 分钟前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
ifenxi爱分析1 小时前
爱分析最新报告解读:AI数据基础设施与数据中台的区别
大数据·人工智能
莫逸风2 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
品牌全球行2 小时前
共商共建共享 链接数字未来——“一带一路数字新城(深圳)会客厅筹备办”揭牌仪式在深圳隆重举行
大数据·人工智能
z123456789862 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin5211233 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
做个文艺程序员3 小时前
Linux第24篇:Java应用监控体系搭建:Prometheus+Grafana可视化运维
java·grafana·prometheus
数智化管理手记4 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
小钻风33664 小时前
Spring Boot 文件上传详解:深入理解 MultipartFile 的使用与原理
java·开发语言
其美杰布-富贵-李4 小时前
Spring Boot 工程开发全流程说明
java·spring boot·后端