双锁检测
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) { // this will ensure only one instance is loaded
singleton = new Singleton();
}
}
}
return singleton;
}
}
优点:线程安全,性能好
缺点:可以利用反射创建对象,不能保证只有一个实例
枚举
public enum Sington {
INSTANCE;
public void say() {
System.out.println("fuck");
}
}
public class Test {
public static void main(String[] args){
Sington.INSTANCE.say();
}
}
优点:简洁,可以防止多次实例化