美文网首页
单例模式中的懒汉式与饿汉式的用法

单例模式中的懒汉式与饿汉式的用法

作者: 无敌未央様 | 来源:发表于2019-07-23 08:49 被阅读0次

饿汉式

在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建,换句话说,不管你用的用不上,一开始就建立这个单例对象。

/**
 * 饿汉模式
 * @author zhou.ni 
 * @versionCode 1 <每次修改提交前+1>
 */
public class HungrySingle {

    private static final HungrySingle sInstance = new HungrySingle();

    private HungrySingle() {

    }

    public static HungrySingle getInstance() {
        return sInstance;
    }

}

在饿汉模式中,初始化变量的时候最好加上 final 关键字,这样比较严谨。

懒汉式

用synchronized 进行同步处理,并且双重判断是否为null,我们看到synchronized (Singleton.class)里面又进行了是否为null的判断,这是因为一个线程进入了该代码,如果另一个线程在等待,这时候前一个线程创建了一个实例出来完毕后,另一个线程获得锁进入该同步代码,实例已经存在,没必要再次创建,因此这个判断是否是null还是必须的。
但是带来了一个问题。那就是每次都要判断锁,程序的执行效率就会比较低。

/**
 * 懒汉模式
 * @author zhou.ni 
 * @versionCode 1 <每次修改提交前+1>
 */
public class LazySingle {

    private static volatile LazySingle sInstance = null;

    private LazySingle() {

    }

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

}

在懒汉模式中,初始化变量的时候加上 volatile 关键字

如何选择

如果单例模式实例在系统中经常会被用到,饿汉式是一个不错的选择。反之如果单例模式在系统中会很少用到或者几乎不会用到,那么懒汉式是一个不错的选择。

相关文章

  • 单例(Singleton)

    单例设计模式 单例模式的创建 饿汉式1 饿汉式2 懒汉式 优化后的懒汉式(线程安全): 饿汉式与懒汉式区别 单例模...

  • 2018-05-14

    单利设计模式 懒汉式 单例模式 饿汉式 单利模式 懒汉式与饿汉式的区别: 双重锁式 单例模式 (DCL )

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • Singleton 单例模式

    饿汉式单例模式 饿汉式单例模式 通过静态代码块增加异常处理 懒汉式单例模式 存在线程安全问题 懒汉式单例模式 解决...

  • 单例模式

    单例,全局只有一个实例 单例模式可以分为懒汉式和饿汉式: 懒汉式单例模式:在类加载时不初始化。 饿汉式单例模式:在...

  • 第3章 创建型模式-单例模式

    ■ 饿汉式单例类 ■ 懒汉式单例类 ■ 单例模式的实例

  • 大话设计模式之_单例模式

    大话设计模式之___单例模式 什么是单例模式单例模式有哪些(会顺带讲些懒汉式的性能优化)懒汉式与饿汉式的区别 什么...

  • 单例模式的理解

    单例设计模式: 单例模式分为懒汉式和饿汉式。下面分别介绍懒汉式和饿汉式的几种写法。 饿汉式第一种(jdk1.5之前...

  • Kotlin 的单例模式

    Kotlin 的单例模式(5种) Kotlin 的5种单例模式: 饿汉式 懒汉式 线程安全的懒汉式 双重校验锁式 ...

  • 单例模式

    单例模式(饿汉式) 单例模式(懒汉式) 解决两种的弊端的单例模式(双锁)

网友评论

      本文标题:单例模式中的懒汉式与饿汉式的用法

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