笔记:单例模式---懒汉模式和饿汉模式

饿汉模式:用人吃东西来比喻的话,就是小花害怕饿,她把东西都准备好了,到时候饿了就可以直接吃。总结:我先new好,如果后面需要,拿这个用就好了。

代码实现:

public class Single{
      
    private static Single instance = new Single();   //饿汉模式,这里就已经new好了

    private Single(){}  //无参构造

    public static Single getInstance(){
        
        return instance;
    }

}

  

懒汉模式:用丢垃圾来比喻的话,就是小花懒得很,垃圾都堆了一屋了,都下不去脚了,才收拾一下。总结:需要用我才去new。

代码实现:

public class Single{
      
    private static Single instance = null;   //饿汉模式,这里没new

    private Single(){}  //无参构造

    public static Single getInstance(){
        
        if(instance == null){

           instance = new Single();  //需要用才new
        }
 
        return instance;

    }

}

 

区别:

 

饿汉模式因为是最开始就已经创建好的,是线程安全的,效率高

 

懒汉模式因为用的时候才new,如果是多线程的情况下,每个线程进来都会new一个对象,所以非线程安全,节省空间

解决方式:加锁synchronized

public class Single{
      
    private static Single instance = null;   

    private Single(){}  

    public static synchronized Single getInstance(){     //第一种
        
        if(instance == null){

           instance = new Single();  
        }
 
        return instance;

    }
    

public class Single{
  private static Single instance = null;

  
private Single(){} public static Single getInstance(){   synchronized(Single.class){       //二种
      
if(instance == null){
         instance = new Single();
        }
    return instance;
 }  } }

 

posted @ 2023-01-30 20:09  圈圈小菜菜  阅读(77)  评论(0编辑  收藏  举报