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关键字保证多线程环境下的可见性。

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

相关推荐
mftang8 分钟前
Python 字符串拼接成字节详解
开发语言·python
jasligea30 分钟前
构建个人智能助手
开发语言·python·自然语言处理
kokunka34 分钟前
【源码+注释】纯C++小游戏开发之射击小球游戏
开发语言·c++·游戏
C雨后彩虹38 分钟前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
云栖梦泽1 小时前
易语言开发从入门到精通:补充篇·网络编程进阶+实用爬虫开发·API集成·代理IP配置·异步请求·防封禁优化
开发语言
java1234_小锋2 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
铅笔侠_小龙虾2 小时前
Flutter Demo
开发语言·javascript·flutter
2501_944525542 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
计算机学姐2 小时前
基于SpringBoot的电影点评交流平台【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·spring·信息可视化·echarts·推荐算法
福大大架构师每日一题2 小时前
ComfyUI v0.11.1正式发布:新增开发者专属节点支持、API节点强化、Python 3.14兼容性更新等全方位优化!
开发语言·python