美文网首页
单例懒汉实现方式

单例懒汉实现方式

作者: 程序员大亨 | 来源:发表于2020-11-17 16:03 被阅读0次
package singleton;

/**
 * @program: DesignPatterns
 * @description: 单例设计模式-懒汉实现方式
 * @author: 刘泽
 * @create: 2020-11-17 15:28
 */
public class SingletonLazy {
//    private static SingletonLazy instance;

    /**
     * 私有化构造函数
     */
    private SingletonLazy() {
    }

    /**
     * 第一种多线程下线程不安全
     *
     * @return
     */
///    public static SingletonLzay getInstance() {
///        if (instance == null) {
///            instance = new SingletonLzay();
///        }
///        return instance;
///    }

    /**
     * 第二种
     * 通过加锁保证单例(采用synchronized 加锁对方法加锁有很大的性能开销)
     * 解决办法 :锁粒度放小
     *
     * @return : singleton.SingletonLzay
     * @author: 刘泽
     * @date: 2020/11/17 3:37 下午
     */
//    public static synchronized SingletonLazy getInstance() {
//        if (instance == null) {
//            instance = new SingletonLazy();
//        }
//        return instance;
//    }

    /**
     * 第三种 锁粒度放小
     * DCL 双重检查锁定(保证多线程下保持高性能)
     *
     * @return : singleton.SingletonLazy
     * @author: 刘泽
     * @date: 2020/11/17 3:41 下午
     */
//    public static SingletonLazy getInstance() {
//        if (instance == null) {
//            //A,B
//            synchronized (SingletonLazy.class) {
//                if (instance == null) {
//                    instance = new SingletonLazy();
//                }
//            }
//        }
//        return instance;
//    }
    /**
     * volatile 关键字 禁止指令重排
     */
    private static volatile SingletonLazy instance;
    /**
     * 懒汉
     *
     * @return : singleton.SingletonLazy
     * @author: 刘泽
     * @date: 2020/11/17 4:01 下午
     */
    public static SingletonLazy getSingletonLazy() {
        //第一重校验
        if (instance == null) {
            //加锁
            synchronized (SingletonLazy.class) {
                //第二重校验
                if (instance == null) {
                    instance = new SingletonLazy();
                }
            }
        }
        return instance;
    }

    public void property() {
        System.out.println("调用成功");
    }
}

相关文章

  • kotlin实现单例模式

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

  • Android设计模式(单例模式)

    目录 1.单例模式简介 2.单例模式关键点 3.单例模式UML图 4.单例模式的实现方式饿汉式懒汉式同步锁懒汉式D...

  • 单例懒汉实现方式

  • 单例模式实现对比

    参考链接: 单例模式 一、实现对比 二、实现方式 懒汉式(非线程安全) 懒汉式(线程安全) [推荐] 饿汉式 Cl...

  • java设计模式之单例模式

    单例模式属于java设计模式的一种,最常见实现方式有以下几种 懒汉、饿汉、双重检查单例、静态内部类单例。 单例模式...

  • 单例模式

    饿汉模式: 懒汉模式: Double CheckLock(DCL)实现单例 静态内部类实现单例 枚举单例 使用容器...

  • 为什么说Enum实现单例模式是最佳实践

    众所周知,单例的实现有很多方式。从单例加载的时机区分,有懒汉模式、饿汉模式。而从实现方式区分有双重检查模式,内部类...

  • Android设计模式总结

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

  • 单例模式有几种写法?

    懒汉模式 懒汉是变种最多的单例模式。我们从懒汉出发,通过其变种逐渐了解实现单例模式时需要关注的问题。 基础的懒汉 ...

  • Android设计模式----单例模式

    1, 单例模式定义 2, 单例模式的实现方式. 2.1 饿汉式 2.2 懒汉式 优点 : 使用时才会被实例化,在一...

网友评论

      本文标题:单例懒汉实现方式

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