单例模式分享

Java的单例模式详解与案例解析

单例模式是一种常见的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式有多种方式,我们将深入讨论其中的几种,并通过丰富的案例演示它们的用法。

1. 饿汉式单例模式

饿汉式是一种在类加载时就创建实例的方式,线程安全,但可能造成资源浪费。

java 复制代码
public class EagerSingleton {
    private static final EagerSingleton instance = new EagerSingleton();

    private EagerSingleton() {
        // 私有构造函数
    }

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

2. 懒汉式单例模式

懒汉式是一种在需要时才创建实例的方式,线程不安全,需要使用双重检查锁定来保证线程安全。

java 复制代码
public class LazySingleton {
    private static volatile LazySingleton instance;

    private LazySingleton() {
        // 私有构造函数
    }

    public static LazySingleton getInstance() {
        if (instance == null) {
            synchronized (LazySingleton.class) {
                if (instance == null) {
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }
}

3. 静态内部类单例模式

静态内部类方式实现了懒加载,并保证了线程安全。

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

    private static class SingletonHolder {
        private static final InnerClassSingleton instance = new InnerClassSingleton();
    }

    public static InnerClassSingleton getInstance() {
        return SingletonHolder.instance;
    }
}

4. 枚举单例模式

枚举方式是实现单例的最佳方式之一,它天生就是线程安全的。

java 复制代码
public enum EnumSingleton {
    INSTANCE;

    // 枚举类可以包含其他方法和属性
    public void someMethod() {
        // 实现方法逻辑
    }
}

5. 双重校验锁单例模式

双重校验锁方式是懒汉式的优化版本,既能实现懒加载又能保证线程安全。

java 复制代码
public class DoubleCheckLockingSingleton {
    private static volatile DoubleCheckLockingSingleton instance;

    private DoubleCheckLockingSingleton() {
        // 私有构造函数
    }

    public static DoubleCheckLockingSingleton getInstance() {
        if (instance == null) {
            synchronized (DoubleCheckLockingSingleton.class) {
                if (instance == null) {
                    instance = new DoubleCheckLockingSingleton();
                }
            }
        }
        return instance;
    }
}

结语

单例模式在实际开发中应用广泛,不同的实现方式适用于不同的场景。选择合适的单例模式可以有效地控制对象的创建与访问,提高系统的性能和可维护性。希望通过本文的介绍,你对Java中单例模式有了更深刻的理解。如果有任何疑问或建议,欢迎在评论中提出。感谢阅读!

相关推荐
m0_587383005 小时前
智慧场馆解决方案实战指南:从系统架构到落地部署全解析
java·spring boot·架构·系统架构
我不是疯子是傻子6 小时前
Qt 程序打包部署全攻略:从 windeployqt 到 Inno Setup 的静默安装与版本迭代实战
开发语言·qt
ZC跨境爬虫6 小时前
LeetCode 13. 罗马数字转整数(多解法详解 + Java Python 实现)
java·python·leetcode
省长6 小时前
Sa-Token v1.46.0 发布 🚀,来看看有没有令你心动的功能!
java·后端·开源
LayZhangStrive6 小时前
融360 一面
java·面试·后端开发
城管不管6 小时前
重生——第十次面试之开源中国一面挂
java·linux·开发语言·算法·面试·职场和发展·开源
Java小白笔记7 小时前
Windows系统免软件命令激活
java·网络·人工智能·windows·ai·ai编程
爱敲键盘的猴子7 小时前
深入理解 Java HashMap
java·hashmap
霸道流氓气质7 小时前
Java开发者AI编程常用MCP、Skills、Rules全景汇总
java·开发语言·ai编程
天涯醉青楼7 小时前
Spring Boot 接口返回 Bean 时字段名“变形”的深度剖析与解决方案
java