1、饿汉式
public class EagerSingleton {
//2.创建唯一实例
private static EagerSingleton instance=new EagerSingleton();
//1.外部不能创建实例,所以私有化构造方法
private EagerSingleton(){
}
//3.提供一个静态方法获取唯一实例
public static EagerSingleton getInstance(){
return instance;
}
}
2、懒汉式
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton(){
}
public synchronized static LazySingleton getInstance(){
if(instance==null){
instance=new LazySingleton();
}
return instance;
}
}
3、双检查式
public class DoubleSingleton {
private static DoubleSingleton instance;
private DoubleSingleton() {
}
public static DoubleSingleton getInstance() {
if (instance == null) {
synchronized (DoubleSingleton.class) {
if (instance == null) {
instance = new DoubleSingleton();
}
}
}
return instance;
}
}
总结:
1)饿汉式是线程安全的。
2)懒汉式是不能兼顾性能和线程安全。
3)双检查式兼顾性能和线程安全。