Java技术教程 – 使用单例模式 (Singleton Pattern)

2024-11-30 0 769

Java技术教程

引言

在Java编程中,单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。本教程将详细介绍如何在Java中实现单例模式,并包含一个详细的代码案例。

单例模式简介

单例模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点来访问该实例。它通常用于以下情况:

  • 控制资源的访问,如数据库连接池。
  • 在整个应用程序中共享一个实例,例如日志系统。

实现单例模式

在Java中实现单例模式有多种方法,其中最常见的是“饿汉式”和“懒汉式”。本教程将演示“饿汉式”和一种线程安全的“懒汉式”实现。

饿汉式

饿汉式在类加载时就创建实例,因此是线程安全的。


public class SingletonEager {
    // 静态实例在类加载时被初始化
    private static final SingletonEager INSTANCE = new SingletonEager();

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

    // 提供全局访问点
    public static SingletonEager getInstance() {
        return INSTANCE;
    }
}
        

线程安全的懒汉式

懒汉式在第一次调用getInstance()时才创建实例。为了确保线程安全,我们可以使用synchronized关键字。


public class SingletonLazy {
    // 静态实例,初始为null
    private static volatile SingletonLazy INSTANCE;

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

    // 提供全局访问点,使用synchronized确保线程安全
    public static synchronized SingletonLazy getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new SingletonLazy();
        }
        return INSTANCE;
    }
}
        

注意:在Java 5及以上版本中,可以使用双重检查锁定(Double-Checked Locking)来优化线程安全的懒汉式实现,以减少同步的开销。

双重检查锁定


public class SingletonDoubleChecked {
    // 使用volatile确保多线程正确处理INSTANCE变量
    private static volatile SingletonDoubleChecked INSTANCE;

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

    // 提供全局访问点,使用双重检查锁定
    public static SingletonDoubleChecked getInstance() {
        if (INSTANCE == null) { // 第1次检查
            synchronized (SingletonDoubleChecked.class) {
                if (INSTANCE == null) { // 第2次检查
                    INSTANCE = new SingletonDoubleChecked();
                }
            }
        }
        return INSTANCE;
    }
}
        

结论

单例模式是Java编程中常用的设计模式之一,用于确保一个类只有一个实例,并提供一个全局访问点。本教程介绍了单例模式的简介,并演示了“饿汉式”、“线程安全的懒汉式”以及“双重检查锁定”的实现方式。

Java技术教程
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

本站尊重知识产权,如知识产权权利人认为平台内容涉嫌侵犯到您的权益,可通过邮件:8990553@qq.com,我们将及时删除文章
本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除

腾谷资源站 java Java技术教程 – 使用单例模式 (Singleton Pattern) https://www.tenguzhan.com/1547.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务