枚举方式:
public class SingletonObject {
private SingletonObject() {
}
/**
* 枚举类型是线程安全的,并且只会装载一次
*/
private enum Singleton {
INSTANCE;
private final SingletonObject instance;
Singleton() {
instance = new SingletonObject();
}
private SingletonObject getInstance() {
return instance;
}
}
public static SingletonObject getInstance() {
return Singleton.INSTANCE.getInstance();
}
}
《The "Double-Checked Locking is Broken" Declaration》:https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html?spm=ata.21736010.0.0.1dab7536J8dnkS