单例模式的初识

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);
    }
}
相关推荐
清心歌2 分钟前
HashMap实现原理及扩容机制
java
一只大袋鼠2 分钟前
数据库连接池从入门到精通(下):Druid 连接池使用与工具类封装
java·数据库·连接池
禹中一只鱼5 分钟前
【IDEA 出现 `IDE error occurred`】
java·ide·spring boot·intellij-idea
西凉的悲伤5 分钟前
Guava类库——Lists.partition() 高效分批处理列表数据
java·guava
weixin_408099676 分钟前
【保姆级教程】按键精灵调用 OCR 文字识别 API(从0到1完整实战 + 可运行脚本)
java·前端·人工智能·后端·ocr·api·按键精灵
brahmsjiang7 分钟前
Java类加载机制解析:从JVM启动到双亲委派,再到Android的特殊实现
android·java·jvm
yaaakaaang9 分钟前
十一、享元模式
java·享元模式
卓怡学长11 分钟前
基于 SpringBoot 的生活信息分享平台,从 0 到 1 完整实现(附源码 + 数据库)
java·数据库·spring boot·tomcat·maven
蓝天守卫者联盟111 分钟前
多段式TO炉厂家深度解析:技术选型与行业应用洞察
大数据
ID_1800790547312 分钟前
Python解析小红书(XHS)笔记评论 API,json数据返回参考
java·服务器·数据库