Java的单例模式

谦逊不值得可耻,放荡才是。

Humility is not worthy of shame, debauchery is.

Java单例模式

单例模式是一种常见的设计模式,用于确保某个类只有一个实例,并提供一个全局访问点。

懒汉模式 vs 饿汉模式

懒汉模式

  • 懒汉模式:在需要时才创建实例,具有延迟加载的特性,类加载速度快,但运行时获取对象的速度较慢。 (时间换空间)
  • 线程不安全:懒汉模式在多线程环境下存在线程安全问题,可能会创建多个实例。

饿汉模式

  • 饿汉模式:在类加载时就完成初始化工作,因此获取对象的速度较快,但不具备延迟加载的特性。(空间换时间)
  • 线程安全:饿汉模式通常是线程安全的,因为实例在类加载时已经创建好。

实现单例模式的三个要素

  1. 构造函数私有化:防止外部直接实例化对象。
  2. 自己提供自己的实例:在类内部创建私有静态实例。
  3. 外部提供公有的访问方法:通过公有的静态方法返回实例。

示例代码

饿汉模式

java 复制代码
public class Config1 {
    // 构造函数私有化
    private Config1() { }

    // 自己提供自己的实例 -- 饿汉模式
    private static Config1 config1 = new Config1();

    // 外部提供一个公有的访问方法
    public static Config1 getInstance() {
        return config1;
    }
}

懒汉模式

java 复制代码
public class Config2 {
    // 构造函数私有化
    private Config2() { }

    // 使用volatile关键字保证多线程环境下的可见性
    private static volatile Config2 config2;

    // 外部提供一个公有的访问方法,双重检查锁定保证线程安全
    public static Config2 getInstance() {
        if (config2 == null) {
            synchronized (Config2.class) {
                if (config2 == null) {
                    config2 = new Config2();
                }
            }
        }
        return config2;
    }
}

在上述示例中,Config1类采用了饿汉模式实现单例模式,而Config2类采用了懒汉模式实现单例模式。懒汉模式中使用了双重检查锁定来保证线程安全性,同时使用volatile关键字保证多线程环境下的可见性。

单例模式在实际开发中经常用于管理全局资源、配置信息等,但在多线程环境下需要谨慎处理,以确保线程安全性。

相关推荐
earthzhang20211 小时前
【1028】字符菱形
c语言·开发语言·数据结构·c++·算法·青少年编程
earthzhang20213 小时前
第3讲:Go垃圾回收机制与性能优化
开发语言·jvm·数据结构·后端·性能优化·golang
apocelipes4 小时前
golang unique包和字符串内部化
java·python·性能优化·golang
纵有疾風起4 小时前
C++——类和对象(3)
开发语言·c++·经验分享·开源
Full Stack Developme4 小时前
java.text 包详解
java·开发语言·python
文火冰糖的硅基工坊5 小时前
[嵌入式系统-135]:主流AIOT智能体开发板
开发语言·嵌入式·cpu
刘梦凡呀5 小时前
C#获取钉钉平台考勤记录
java·c#·钉钉
best_virtuoso6 小时前
PostgreSQL 常见数组操作函数语法、功能
java·数据结构·postgresql
yudiandian20146 小时前
02 Oracle JDK 下载及配置(解压缩版)
java·开发语言
要加油哦~6 小时前
JS | 知识点总结 - 原型链
开发语言·javascript·原型模式