单例模式的特点:
1、单例类只能创建一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给其他所有对象提供这一实例。
饿汉式与懒汉式的区别:
1、时间和空间
懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间。
饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断了,节省了运行时间。
2、线程安全
饿汉式是线程安全的,因为虚拟机保证只会装载一次,在装载类的时候是不会发生并发的。
懒汉式如果不加同步线程不安全,加同步线程安全。
饿汉式结构:
public void Singleton{
public static Singleton singleton = new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton;
}
}
懒汉式结构:
public void Singleton{
public static Singleton singleton = null;
private Singleton(){
}
public static Singleton getSingleton(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}