• 单例模式的实现方式有哪两种?


    单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点来获取该实例。在 Java 中,实现单例模式有两种常见的方式:

    1.懒汉式单例

    懒汉式单例在首次请求时才创建实例,如果实例已经存在,则返回现有实例。

    这种方式的优点是节省了资源,因为只有在需要时才会创建对象。但是,需要注意多线程并发访问的情况,需要进行额外的同步控制以确保只创建一个实例

    1. public class LazySingleton {
    2. private static LazySingleton instance;
    3. private LazySingleton() {
    4. // 私有构造方法
    5. }
    6. //getInstance() 方法使用了 synchronized 关键字来确保线程安全,但这会带来性能开销
    7. public static synchronized LazySingleton getInstance() {
    8. if (instance == null) {
    9. instance = new LazySingleton();
    10. }
    11. return instance;
    12. }
    13. }

    2.饿汉式单例

    饿汉式单例在类加载时就创建实例,因此不存在多线程并发访问的问题。这种方式的缺点是如果该实例很大或者在应用程序启动时就不需要,会浪费资源

    1. //不需要额外的同步控制,因为实例在类加载时就已经创建,不存在竞争条件
    2. public class EagerSingleton {
    3. private static final EagerSingleton instance = new EagerSingleton();
    4. private EagerSingleton() {
    5. // 私有构造方法
    6. }
    7. public static EagerSingleton getInstance() {
    8. return instance;
    9. }
    10. }

    总结:

    如果希望延迟实例化并考虑多线程安全性,用懒汉式单例,

    如果希望简单明了且不担心资源浪费,用饿汉式单例

    另外,还可以考虑使用双重检查锁定等方式来改进懒汉式单例的性能

  • 相关阅读:
    服务器带宽与家用带宽的区别
    分页查询与集合查询
    matlab 采用描点法进行数据模拟和仿真
    HamsterBear F1C200s Linux v5.17 RTL8188EUS 适配
    正则表达式从入门到高级
    LeetCode 75. 颜色分类
    15个卫星影像查看网站
    经典网络架构-ResNet
    没有使用IaC的DevOps系统都是耍流氓
    基于单片机的万年历温度无线传输控制系统系统
  • 原文地址:https://blog.csdn.net/qq_52963857/article/details/133047447