懒汉式
public class DoubleCheck {
private volatile static DoubleCheck ins;
private DoubleCheck() {}
public static DoubleCheck getIns() {
if (null==ins){ //检查
synchronized (DoubleCheck.class){
if (null == ins) { //又检查一次
ins = new DoubleCheck();
}
}
}
return ins;
}
}
饿汉式
public class Early {
private static final Early ins = new Early();
public static Early getIns() {
return ins;
}
}
饿汉式的原理其实是基于classloder机制来避免了多线程的同步问题
静态内部类
public class Singleton {
private static class Holder{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getIns(){
return Holder.INSTANCE;
}
}