单例模式有懒汉式和饿汉式
先来懒汉式
public class Singleton {
private static Singleton singleton;
private Singleton(){}
public static Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
以上实现单例模式不是线程安全的
if(singleton==null){
synchronized (Singleton.class) {
if(singleton == null){
singleton = new Singleton();
}
}
}
这种方式交double-check检查两次,保证并发安全以及性能。
饿汉式
private static Singleton singleton = new Singleton();
public Singleton(){}
public static Singleton getInstance(){
return singleton;
}
由于静态成员是随类加载而加载的,并且在内存中只有一份。