Java单例模式的饿汉式与懒汉式实现比较

10,209次阅读
没有评论

共计 1187 个字符,预计需要花费 3 分钟才能阅读完成。

一颗跳动的心
2023-07-23 09:30:00
浏览数 (2295)

在 Java 中,单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。饿汉式和懒汉式是单例模式的两种实现方式。本文将详细介绍 Java 单例模式的饿汉式和懒汉式实现,并比较它们之间的优缺点。

饿汉式实现

 饿汉式是在类加载时就创建唯一实例,并在类内部进行实例化。它的实现非常简单,通过私有化构造方法和静态成员变量来确保只有一个实例。示例代码:

public class EagerSingleton {private static final EagerSingleton instance = new EagerSingleton();

    private EagerSingleton() {// 私有构造函数,防止外部实例化}

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

优点:

  • 线程安全:在类加载时就创建了实例,不需要考虑线程安全问题。
  • 简单明了:实现简单,代码易于理解。

缺点:

  • 立即加载:类加载时即创建实例,可能会浪费资源。
  • 不支持延迟加载:如果实例的创建过程较为耗时,可能会导致程序启动变慢。

懒汉式实现

懒汉式是在第一次使用时才进行实例化,实现了延迟加载的效果。在多线程环境下需要考虑线程安全问题。示例代码:

public class LazySingleton {
    private static LazySingleton instance;

    private LazySingleton() {// 私有构造函数,防止外部实例化}

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

优点:

  • 延迟加载:在第一次使用时才创建实例,节省了资源。
  • 线程安全:使用 synchronized 关键字确保线程安全。

缺点:

  • 性能影响:由于使用了 synchronized,可能会导致性能下降,特别是在高并发环境下。
  • 可能存在重复创建实例:在多线程环境下,可能出现多个线程同时判断 instance 为空的情况,从而重复创建实例。

如何选择

如果希望在程序启动时就创建实例,并且没有性能要求,可以选择饿汉式实现。

如果希望延迟加载实例,并且要考虑线程安全问题,可以选择懒汉式实现。

结语

Java 单例模式的饿汉式和懒汉式是常用的两种实现方式。饿汉式在类加载时就创建实例,线程安全且简单明了;懒汉式在第一次使用时才创建实例,具有延迟加载的特点,但需要考虑线程安全和性能问题。在实际开发中,根据需求和场景合理选择合适的实现方式,能够确保对象的唯一性和全局访问性。

  学 java,就到 java 编程狮

原文地址: Java 单例模式的饿汉式与懒汉式实现比较

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-20发表,共计1187字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)