单例模式(Singleton)

单例模式为一个面向对象的应用程序提供了对象惟一的访问点,不管它实现何种功能,整个应用程序都会同享一个实例对象。

1、饿汉模式:
java 复制代码
public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){}

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

这种方式在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快。

2、懒汉模式**(线程不安全)**
java 复制代码
public class Singleton {
    private static Singleton instance;
    private Singleton (){}

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

懒汉模式申明了一个静态对象,在用户第一次调用时初始化,虽然节约了资源,但第一次加载时需要实例化,反映稍慢一些,而且在多线程不能正常工作。

2、懒汉模式**(线程安全)**
java 复制代码
public class Singleton {
    private static Singleton instance;
    private Singleton (){}

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

这种写法能够在多线程中很好的工作,但是每次调用getInstance方法时都需要进行同步,造成不必要的同步开销,而且大部分时候我们是用不到同步的,所以不建议用这种模式。

相关推荐
yaoxin52112314 分钟前
229. Java 集合 - 操作集合中的多个元素(批量操作)
java·开发语言·python
C++chaofan18 分钟前
MyBatis - Plus学习笔记
java·spring boot·笔记·后端·mysql·架构·mybatis
HSJ017020 分钟前
Aviator中使用BigDecimal进行高精度计算
java·开发语言·bigdecimal·aviator
weixin_3077791324 分钟前
利用 AWS Lambda 与 EventBridge 优化低频 Java 作业的云计算成本
java·开发语言·云原生·云计算·aws
guangzan35 分钟前
TypeScript 中的单例模式
设计模式
一缕南风36 分钟前
Spring Boot 响应拦截器(Jackson)实现时间戳自动添加
java·spring boot·后端·拦截器
期待のcode41 分钟前
Docker容器
java·docker·容器
Homeey41 分钟前
深入理解 synchronized:从硬件原子性到并发架构设计
java·后端
ZhangBlossom1 小时前
【Java】EasyExcel实现导入导出数据库中的数据为Excel
java·数据库·excel
L.EscaRC1 小时前
Lua语言知识与应用解析
java·python·lua