单例模式(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方法时都需要进行同步,造成不必要的同步开销,而且大部分时候我们是用不到同步的,所以不建议用这种模式。

相关推荐
dualven_in_csdn1 小时前
搞了两天的win7批处理脚本问题
java·linux·前端
C++chaofan4 小时前
74. 搜索二维矩阵
java·算法·leetcode·矩阵
诺浅4 小时前
AWS S3 SDK FOR JAVA 基本使用及如何兼容七牛云
java·spring boot·aws
迢迢星万里灬5 小时前
Java求职者面试:微服务技术与源码原理深度解析
java·spring cloud·微服务·dubbo·netty·分布式系统
KIDAKN5 小时前
java--怎么定义枚举类
java·开发语言
何中应5 小时前
第一个人工智能(AI)问答Demo
java·人工智能·语言模型
东阳马生架构6 小时前
商品中心—3.商品可采可补可售的技术文档
java
bxlj_jcj6 小时前
解锁Java线程池:性能优化的关键
java·性能优化·多线程
海棠一号6 小时前
JAVA理论第七章-MYSQL
java·数据库·mysql