美文网首页
如何高效的实现单例模式

如何高效的实现单例模式

作者: 骑着毛驴追宝马 | 来源:发表于2017-09-24 01:04 被阅读0次

在面向对象语言开发中,单例模式作为23种设计模式中最简单的设计模式,对于我们来说并不陌生,但如何准确并高效的实现单例模式,对于我们来说还是得好好考虑一下。

第一种单例模式:

public class SingletonInstance {

private static SingletonInstance instance;

private SingletonInstance() {
}

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

相信大家对这段代码都不陌生,因为我们大多都写过这样的代码。但这种写法会带来很明显的缺陷,当我们在多线程中执行这段代码的时候,如果至少两个线程都执行了getInstance()方法,并且都对instance判断结果为null,这个时候就会产生至少两个SingletonInstance实例。所以从严格意义上讲,这种写法是不正确的。

接下来我们看第二种写法:

public class SingletonInstance {

private static SingletonInstance instance;

private SingletonInstance() {
}

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

这种方法也是我们比较容易想到的,这种写法满足了正确性原则,但频繁的加锁操作也会让我们的代码显得不够高效,如何保证既正确又高效的写法呢?

我们继续来看第三种实现:

public class SingletonInstance {

private static SingletonInstance instance;
private static Object syncObj = new Object();


private SingletonInstance() {
}

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

这种写法是对第二种实现方式的一种改进,即只有在第一次获取SingletonInstance实例时才会进行加锁操作,基本上达到了高效的写法。

接下来我们来看第四种实现方式:

public class SingletonInstance {

private static SingletonInstance instance = new SingletonInstance();

private SingletonInstance() {
}

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

比起前面几种实现方式,这种写法算是最高效的了,在jvm类加载器加载SingletonInstance时即已经生成SingletonInstance实例。所以在我们调用getInstance()时也不存在instance为null的情况。

相关文章

  • python面试题-2018.1.30

    问题:如何实现单例模式? 通过new方法来实现单例模式。 变体: 通过装饰器来实现单例模式 通过元类来创建单例模式...

  • 常见的设计模式

    创建型模式 结构型模式 行为模式 单例模式 单例模式的优点 常见的五种单例模式实现方式 单例带来的问题 如何选择 ...

  • 项目实战—那些年常用的单例模式

    常见的单例模式:饿汉式、懒汉式、双重检查锁模式、静态内部类实现单例模式、枚举单例模式,本文重点是在项目中如何实现上...

  • Python经典面试题21道

    1、Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模...

  • Python最经典面试题21道,必看!

    1、Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模...

  • Python 经典面试题

    1、Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模...

  • Python 经典面试题

    1、Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模...

  • 如何高效的实现单例模式

    在面向对象语言开发中,单例模式作为23种设计模式中最简单的设计模式,对于我们来说并不陌生,但如何准确并高效的实现单...

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

网友评论

      本文标题:如何高效的实现单例模式

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