public class YamlReadUtils{
private YamlReadUtils() {
if (SingletonHolder.instance != null) {
throw new IllegalStateException();
}
}
/**
* use static inner class achieve singleton
*/
private static class SingletonHolder {
private static YamlReadUtils instance = new YamlReadUtils();
}
public static YamlReadUtils getInstance() {
return SingletonHolder.instance;
}
}
考虑反射:
由于在调用SingletonHolder.instance 的时候才会对单例进行初始化,而且通过反射是不能从外部类中获取内部类的属性的。
所以这种模式避免了反射入侵。
考虑多线程:
由于静态内部类的特性,只有在其被第一次引用的时候才会被加载,所以可以保证其线程安全性。