饿汉模式-初始化加载
public class HungryManSingleton {
private HungryManSingleton() {
}
// 使用private static修饰
private static HungryManSingleton hungryManSingleton = new HungryManSingleton();
public static HungryManSingleton getHungryManSingleton() {
return hungryManSingleton;
}
}
饿汉模式-延时加载(建议用这种)
public class HungryManSingleton {
private HungryManSingleton() {
}
// 内部静态类,懒加载
public static HungryManSingleton getInstance() {
return InnerStaticClass.hungryManSingleton;
}
static class InnerStaticClass {
private static HungryManSingleton hungryManSingleton = new HungryManSingleton();
}
}
懒汉模式
public class LazyManSingleton {
private LazyManSingleton() {
}
// volatile防止指令重排
private static volatile LazyManSingleton lazyManSingleton;
public static LazyManSingleton getLazyManSingleton() {
// 双重判断double check
if (lazyManSingleton == null) {
synchronized (LazyManSingleton.class) {
if (lazyManSingleton == null) {
lazyManSingleton = new LazyManSingleton();
}
}
}
return lazyManSingleton;
}
}
