饿汉单例模式是立即加载的方法,无论是否用到这个对象,都会加载。
如果在构造方法里写了性能消耗较大,占时比较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。
懒汉单例模式是延迟加载的方式,只有使用的时候才会加载。并且有线程安全问题。
使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化,但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。
public class Demo1 {
public static void main(String[] args) {
// GrilFriend grilFriend = new GrilFriend(); 不可用
GirlFriend instance = GirlFriend.getInstance();
GirlFriend1 instance1 = GirlFriend1.getInstance();
}
}
//饿汉式
class GirlFriend{
private GirlFriend(){}
final GirlFriend girlFriend = new GirlFriend();
public static GirlFriend getInstance(){
return getInstance();
}
}
//懒汉式
class GirlFriend1{
private static GirlFriend1 girlFriend1;
private GirlFriend1(){}
public static GirlFriend1 getInstance(){
if(girlFriend1==null){
girlFriend1 = new GirlFriend1();
}
return girlFriend1;
}
}
看业务需求,如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式