饿汉模式:用人吃东西来比喻的话,就是小花害怕饿,她把东西都准备好了,到时候饿了就可以直接吃。总结:我先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;
} } }
标签:饿汉,模式,instance,Single,static,private,单例,new,public From: https://www.cnblogs.com/daqiqi998/p/17077156.html