1.基于volatile的双重检查锁定方式
public class SafeDoubleCheckedLocking {
private volatile static Instance instance;
public static Instance getInstance() {
if (instance == null) {
synchronized (SafeDoubleCheckedLocking.class) {
if (instance == null){
// new class 不是原子操作,有可能经过编译器,处理器的指令重排序因此 instance必须是volatile
instance = new Instance();
}
}
}
return instance;
}
static class Instance {
}
}
2.基于类初始化-静态内部类方式
public class InstanceFactory {
private static class InstanceHolder {
public static Instance instance = new Instance();
}
public static Instance getInstance() {
return InstanceHolder.instance;
}
static class Instance {
}
}
note: Instance 被定义成静态内部类,可以根据实际需要定义成普通的public类