前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java线程面试题:如何在 Java 中实现线程安全的单例模式?

Java线程面试题:如何在 Java 中实现线程安全的单例模式?

作者头像
GeekLiHua
发布2025-01-21 15:06:07
发布2025-01-21 15:06:07
9000
代码可运行
举报
文章被收录于专栏:JavaJava
运行总次数:0
代码可运行

Java线程面试题:如何在 Java 中实现线程安全的单例模式?

线程安全的单例模式可以使用双重检查锁定和静态内部类两种方式实现。

双重检查锁定

代码语言:javascript
代码运行次数:0
复制
public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {}

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

在上面的例子中,volatile关键字保证了instance的修改对于其他线程的可见性。getInstace方法采用了双重检查锁定,即在保证多线程情况下只有一个对象被创建的情况下减少锁竞争,进而提高效率。在第一次获取单例对象时会通过synchronized关键字同步化整个方法,以避免对象的重复创建。

静态内部类

代码语言:javascript
代码运行次数:0
复制
public class Singleton {
    private Singleton() {}

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

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

在这个例子中,我们使用了一个私有的静态内部类SingletonHolder来持有单例实例,在该类被加载时才会创建对象。由于这个静态内部类只会被加载一次,因此多线程环境下也能够保证只有一个对象被创建,并且不用添加同步支持,从而提高效率。

总结:线程安全的单例模式是并发编程中常见的设计模式之一。通过使用双重检查锁定或静态内部类等方式,可以确保在多线程环境下只有一个对象被创建,并尽可能减少性能和效率的损耗。需要根据具体情况选择合适的实现方式来实现线程安全的单例模式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java线程面试题:如何在 Java 中实现线程安全的单例模式?
    • 双重检查锁定
    • 静态内部类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档