Java中案例模式的构建方法有两种,一种是懒汉模式,一种是饿汉模式。
- 懒汉模式,指全局的单例模式在第一次被使用时构建;
- 饿汉模式,只全局的单例模式在类装载时构建;
饿汉式:
public class Singleton {
private static final Singleton singleton=new Singleton();
public Singleton() {
}
public static Singleton getSingleton(){
return singleton;
}
}
可见饿汉模式是典型的空间换时间,当类装载的时候就会创建类的实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断,节省了运行时间。
懒汉式
线程不安全:
public class Singleton {
private static Singleton singleton;
public Singleton() {
}
public static Singleton getSingleton(){
if (singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
线程安全:
public class Singleton {
private static Singleton singleton;
public Singleton() {
}
public static Singleton getSingleton(){
if (singleton==null){
synchronized (Singleton.class){
if (singleton==null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
可见懒汉式是典型的时间换空间,就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间