zoukankan      html  css  js  c++  java
  • 单例模式

    1,最简单的实现

        首先在类中新建一个私有的构造函数,这样类就不能被实例话了。然后在类中新建一个私有的静态实例,然后提供一个public方法访问该静态方法,这样使用着就可以使用这个类的实例了。

    public class SingletonClass{
        pirvate static SingletonClass sInstance = new SingletonClass();
        
        public SingletonClass getInstance(){
            return sInstance;
        }    
        
        private SingletonClass(){
        }
    }
    

    2,性能优化--------Lazy loaded

        上例中不管SingletonClass是否使用都会新建一个实例,如果SingletonClass 很耗时,并且可能用不到。代码的变化有两区,一是新建一个实例,赋值为空,知道第一次使用的时候才会赋值。

    public class SingletonClass{
        private static SingletonClass sInstance = null;
    
        public SingletonClass getInstance(){
            if(null == sInstance){
                sInstance = new SingletonClass();
            } 
         
         return sInstance;    
        }
        private SingletonClass(){
        }
    }
    

    3,同步

        上述程序在单线程没有问题,当在多线程下,比喻A线程希望使用SingletonClass实例,第一次调用,发现sInstance是空,就新建sInstance实例,就在这个时候CPU发生时间片切换,切换到进程B,B也要使用实例,因为切换发生在A线程检测完后,所以sInstance是空。这时候A和B线程就会新建不同的实例。

    public class SingletonClass{
        pirvate static SingletonClass sInstance = null;
    
        public synchronized SingletonClass getInstance(){
            if(null == sInstance){
               sInstance = new SingletonClass(); 
           }
    
            return sInstance;
        }
    
        private SingletonClass(){}
    }
    

        需要使用同步锁,一个线程必须等待另一个线程新建完后,才能使用,这样保证了实例的唯一性。

    4,又是性能  

        每次调用实例前,先判断是否为空,如果为空,在同步新建,如果不为空,直接返回,

    public class SingletonClass{
        private atatic SingletonClass sInstance = null;
    
        public SingletonClass getInstance(){
            if(null == sInstance){
                synchronized(SingletonClass.class){
                    sInstance = new SingletonClass(); 
               }
            }
    
            return sInstance;
        }
    
        private SingletonClass(){}   
    }
    

      

  • 相关阅读:
    201671010432词频统计软件项目报告
    201671010432吴兰兰:实验三作业互评与改进报告
    快速通读《构建之法》后的疑问:
    读《构建之法》所提出的问题
    实验十四 团队项目评审&课程学习总结
    201671010437-王小倩-实验四附加实验
    201671010437+王小倩+《英文文本统计分析》结对项目报告
    201671010437 王小倩+词频统计软件项目报告
    201671010437 王小倩 + 实验三作业互评与改进报告
    201671010442 葸铃 实验十四 团队项目评审&课程学习总结
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/5072309.html
Copyright © 2011-2022 走看看