• 单例模式


    最近面试问别人单例模式,结果发现自己对单例模式也是一知半解  所以这边记录一下

        单例模式     简单来说的意思就是   我们使用的对象及实例化  都是同一对象

        引用另一个文章的代码http://www.importnew.com/18872.html

    饿汉模式

        

    public class Singleton {   
        private static Singleton = new Singleton();
        private Singleton() {}
        public static getSignleton(){
            return singleton;
        }
    }

    这种做法不的缺点是:我们第一次实例化该单例的时候   不管我们是否需要  他都会new  一个对象给我们

    加入延时加载 懒汉模式

      

    public class Singleton {
        private static Singleton singleton = null;
        private Singleton(){}
        public static Singleton getSingleton() {
            if(singleton == null) singleton = new Singleton();
            return singleton;
        }
    }

    但是这种方法  是线程不安全的的

    加锁

      

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

    这种做法的话 效率又太低    

    volatile    修饰符可以看这篇文章http://www.importnew.com/24082.html

    加入双重锁

      

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

    内部静态类

      

    public class Singleton {
        private static class Holder {
            private static Singleton singleton = new Singleton();
        }
    
        private Singleton(){}
    
        public static Singleton getSingleton(){
            return Holder.singleton;
        }
    }

    枚举写法

    public enum Singleton {
        INSTANCE;
        private String name;
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name = name;
        }
    }
    
  • 相关阅读:
    python数据分析与展示
    人生苦短,我学python。
    数学
    解决git for windows 和 vim for windows 的 vim 显示中文乱码的问题
    解决win7连接IPsec报错789和809错误
    python安装pandas库
    vim配置文件
    0x03-数据和C
    Ubutun安装问题记录
    Django-rest-framework --- 三大认证
  • 原文地址:https://www.cnblogs.com/liaohongbin/p/8807528.html
Copyright © 2020-2023  润新知