zoukankan      html  css  js  c++  java
  • 每日一题 为了工作 2020 0415 第四十四题

    *单例设计模式

    /**
     * 单例设计模式
     * 单例模式便是创建型设计模式的一种,它确保某一个类在系统中只有一个实例,并自行实例化,
     * 同时向外部提供获取这个唯一实例的接口。从这段描述中,我们不难可以得到单例模式的三大特性:
     * 1.单例类只有一个实例。
     * 2.单例类必须自己实例化自己。
     * 3.单例类需要向外提供实例。
     * 实现一:立即加载 <==>“饿汉模式”
     * 立即加载就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。
     * 很着急的样子,故又被称为“饿汉模式”),常见的实现办法就是直接new实例化。
     * “饿汉模式”的优缺点:
     * 优点:实现起来简单,没有多线程同步问题。
     * 缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,
     * 从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,
     * 静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。
     */
    public class Singleton {
         //将自身对象实例化为一个属性 并利用static,final修饰
        private static final Singleton instance = new Singleton();
         //构造方法私有化
        private Singleton(){}
        //利用静态方法返回实例
        public static Singleton getInstance(){
            return Singleton.instance;
        }
    }
    

      

    /**
     * 单例构造模式
     * 实现二:延迟加载 / “懒汉模式”
     *
     * 延迟加载就是调用get()方法时实例才被创建(先不急着实例化出对象,等要用的时候才给你创建出来。
     * 不着急,故又称为“懒汉模式”),常见的实现方法就是在get方法中进行new实例化。
     *“懒汉模式”的优缺点:
     * 优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并
     * 分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些
     * 特定条件下会节约了内存。
     * 缺点:在多线程环境中,这种实现方法是完全错误的,根本不能保证单例的状态。
     */
    public class SingletonTwo {
        //将自身实例化对象设置为一个属性,并利用static修饰
        private static SingletonTwo instanceTwo;
        //构造方法私有化
        private SingletonTwo(){}
        //利用静态方法返回该类的实例化对象
        public static SingletonTwo getInstanceTwo(){
    //        线程不安全
    //        if (instanceTwo == null){
    //            instanceTwo = new SingletonTwo();
    //        }
    //        return instanceTwo;
    //        线程安全
            if (instanceTwo == null){
                //加锁
                //某个线程取得了类锁,实例化对象第二次检查instancdTwo的时候
                //查看该类是否已经被实例化出来了,如果没有最终进行类的实例化
                synchronized (SingletonTwo.class){
                    if (instanceTwo == null){
                        instanceTwo = new SingletonTwo();
                    }
                }
            }
            return instanceTwo;
        }
    }
    

      

  • 相关阅读:
    [hdu4436 str2int]后缀自动机SAM(或后缀数组SA)
    bytedance专题
    LSTM+CRF维特比解码过程
    spark core类梳理
    spark源码阅读---Utils.getCallSite
    python2.7官方文档阅读笔记
    cs224d---词向量表示
    cs231n---强化学习
    cs231n---生成模型
    Spring 2017 Assignments3
  • 原文地址:https://www.cnblogs.com/walxt/p/12708736.html
Copyright © 2011-2022 走看看