美文网首页
实现线程安全的单例模式

实现线程安全的单例模式

作者: 打工这件小事 | 来源:发表于2018-11-05 20:45 被阅读0次

《剑指offer》面试题2:实现线程安全的单例模式

推荐的解法(Java实现):
1、使用静态内部类(同时实现序列化接口)。代码如下:

public class Singleton implements Serializable {
    private Singleton() {}
    private static class SingletonHolder {
        private static final Singleton instance = new Singleton();
    }
    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
    // 对象被反序列化时自动调用(非静态)
    private Object readResolve() {
        return SingletonHolder.instance;
    }
}

其中非静态的readResolve方法是当对象被反序列化时自动调用的方法(如不实现序列化接口,可不写该方法)

2、使用双重检查锁+volatile关键字防止指令重排。代码如下:

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

以上两种解法是在笔试面试中推荐使用的解法。

相关文章

  • 设计模式

    手写单例模式(线程安全) 你知道几种设计模式?单例模式是什么?Spring中怎么实现单例模式?

  • 实现单例模式的方式2

    方式一: 能保证线程安全 定义类的时候实现单例模式 方式二: 能保证线程安全 对已定义好的类实现单例模式

  • 设计模式——单例模式的破坏

    概述: 之前学习了单例模式的几种实现,解决了多线程情况下,单例的线程安全问题,保证了单例的实现。但是单例模式在下面...

  • 单例模式的常用实现方式

    单例模式属于最常用的设计模式,Java中有很多实现单例模式的方式,各有其优缺点 实现方式对比 单例实现方式线程安全...

  • kotlin实现单例模式

    1.懒汉式实现单例模式 2.线程安全懒汉式实现单例模式 3.双重校验懒汉式实现单例模式 4.静态内部类方式实现单例模式

  • 单例

    单例,是Java中很重要的一个设计模式。 实现单例是要考虑并发(线程安全)问题的。 如何实现一个线程安全的单例?你...

  • Java 单例模式

    线程安全的单例模式的几种实现方法分享线程安全的单例模式实现有几种思路,个人认为第2种方案最优雅 饿汉式 借助内部类...

  • C++中线程安全的单例模式

    简介 单例模式是很常用的一种设计模式,在实现过程中要非常注意线程安全,我们会介绍四种方式来实现线程安全的单例模式:...

  • C++单例模式实现(线程安全&支持多参数构造)

    C++单例模式实现(线程安全&支持多参数构造) 线程安全版本 支持多参数版本的单例类 遇到问题点: std::ca...

  • C++单例模式实现(线程安全&支持多参数构造)

    C++单例模式实现(线程安全&支持多参数构造) 线程安全版本 支持多参数版本的单例类 遇到问题点: std::ca...

网友评论

      本文标题:实现线程安全的单例模式

      本文链接:https://www.haomeiwen.com/subject/sndexqtx.html