美文网首页
设计模式之单例模式

设计模式之单例模式

作者: Rannver | 来源:发表于2018-05-08 16:03 被阅读0次

    一、单例模式的特点

    1.只有一个实例
    2.自己给自己创建实例
    3.单例类负责给其他所有对象提供这个实例

    二、单例模式的几种写法及其特点

    1、懒汉式,无法保证线程安全

    public class Singleton{
    
        private static Singleton instance = null;
        
        private Singleton(){}
        
        public static Singleton getInstance(){
            if(instance == null){
                instance  = new Singleton();
            }
            return instance;
        }
    }
    

    2、懒汉式,保证线程安全的方法

    public class Singleton{
    
        private static Singleton instance = null;
        
        private Singleton(){}
        
        public static synchronized Singleton getInstance(){
            if(instance == null){
                instance  = new Singleton();
            }
            return instance;
        }
    }
    

    注意:此方法虽然保证了线程安全,但是执行的效率会很低。

    3、DCL机制(双重检查锁机制),既保障了线程安全,又保障了执行效率

    public class Singleton{
    
        volatile private static Singleton instance  = null;
        
        private Singleton(){}
        
        public static Singleton getInstance(){
            if(instance == null){
                synchronized(Singleton.class){
                    if(instance == null){
                        instance  = new Singleton();
                    }
                }
            }
        }
    }
    

    注意:偶尔脸黑会发生DCL失效,虽然概率很小,不建议在低于JDK6以下的版本使用,一般能够满足需求。

    4、静态内部类的单例模式,保证线程安全和执行效率

    public class Singleton{
        private static class SingletonHolder{
            private static Singelton instance = new Singleton();
        }
        
        private Singleton(){}
        
        public static Singleton getInstance(){
            return SingletonHolder.instance;
        }
    }'
    

    注意:在第一次调用getInsance方法时才会使instance初始化,能够保证线程安全且保证效率。

    相关文章

      网友评论

          本文标题:设计模式之单例模式

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