1、赖汉式
public class LazySingleton {
private static LazySingleton instance = new LazySingleton();
private LazySingleton() {
}
public static LazySingleton getInstance() {
return instance;
}
}
2、饿汉式
public class HungrySingleton {
private static HungrySingleton instance;
private HungrySingleton() {
}
public static HungrySingleton getInstance() {
if (null == instance) {
instance = new HungrySingleton();
}
return instance;
}
}
存在线程同步问题
3、同步饿汉式
public class HungrySingleton {
private static HungrySingleton instance;
private HungrySingleton() {
}
public static synchronized HungrySingleton getInstance() {
if (null == instance) {
instance = new HungrySingleton();
}
return instance;
}
}
可以解决线程同步问题,但是程序中遇到大量调用该方法时,存在效率问题
4、内部类
public class InnerClassSingleton {
private InnerClassSingleton() {
}
private static class InnerClassSingletonHolder {
private static InnerClassSingleton instance = new InnerClassSingleton();
}
public static InnerClassSingleton getInstance(){
return InnerClassSingletonHolder.instance;
}
}
既解决线程问题,同时也不存在效率问题