单例模式的初识

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);
    }
}
相关推荐
小羊没烦恼!1 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
一隅论数智1 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
俊昭喜喜里1 天前
java中的继承和多态的区别
java
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕1 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码1 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖1 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
尧炎科技1 天前
防潮抗变形,就选纯品梅花全桉多层板
大数据
此时不提桶,更待何时1 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang1 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot