我根据挥发性/惰性单例、急切单例、普通单例以及通过枚举等条件以多种方式开发了单例,但具体来说我想了解如下所示的静态持有者模式单例。
public static class Singleton {
private static class InstanceHolder {
public static Singleton instance = new Singleton();
}
private Singleton(){}
public static Singleton getInstance() {
return InstanceHolder.instance;
}
}
请告知在什么条件下它是有益的以及它有什么好处。
这种模式的好处至少有 3 个原因:
- 静态工厂
- 延迟初始化
- 线程安全
JVM 将 InstanceHolder 类的初始化推迟到实际使用时进行,并且由于 Singleton 是使用静态初始化器进行初始化的,因此不需要额外的同步。第一次致电获取实例任何线程都会导致 InstanceHolder 被加载并初始化,此时 Singleton 的初始化通过静态初始化器进行。
静态持有者模式也被认为是双重检查锁定反模式的最智能替代。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)