如何实现 Java 单例模式

发布时间:2025-02-05 17:21:23 作者:小樊
来源:亿速云 阅读:112

在Java中,单例模式是一种确保一个类只有一个实例,并提供全局访问的方法。以下是实现Java单例模式的几种常见方法:

1. 饿汉式单例模式

这种方法是线程安全的,但可能会浪费资源,因为类加载时就创建实例。

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

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

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

2. 懒汉式单例模式(线程不安全)

这种方法的资源利用率高,但需要处理线程安全问题。

public class Singleton {
    private static Singleton instance;

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

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

3. 懒汉式单例模式(线程安全)

使用synchronized关键字确保线程安全,但可能会导致性能问题。

public class Singleton {
    private static Singleton instance;

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

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

4. 双重检查锁定(Double-Checked Locking)

这种方法结合了懒汉式和饿汉式的优点,既保证了线程安全,又避免了不必要的同步开销。

public class Singleton {
    private static volatile Singleton instance;

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

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

5. 静态内部类(推荐)

这种方法利用了Java的类加载机制,既保证了线程安全,又避免了不必要的同步开销。

public class Singleton {
    private Singleton() {
        // 私有构造函数防止外部实例化
    }

    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

6. 枚举(推荐)

这种方法简单且线程安全,是Java单例模式的最佳实践之一。

public enum Singleton {
    INSTANCE;

    // 添加其他方法
    public void doSomething() {
        // 方法实现
    }
}

选择哪种方法取决于具体的需求和场景。静态内部类和枚举是推荐的方式,因为它们既简单又高效。

推荐阅读:
  1. 如何实现单例模式
  2. 如何基于JavaScript实现单例模式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Set集合在Java集合框架中的地位如何

下一篇:Java中Set集合的迭代器如何工作

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》