我已经根据条件以多种方式开发了单例,例如 volatile/lazy 单例、渴望单例、普通单例以及通过 Enum,但我特别想了解下面显示的静态保持器模式单例。
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 是使用静态初始化器初始化的,所以不需要额外的同步。任何线程对 getInstance 的第一次调用会导致 InstanceHolder 被加载和初始化,此时 Singleton 的初始化通过静态初始化程序发生。
静态持有人模式也被认为是双重检查锁定反模式的最聪明的替代品。
关于java - 关于静态保持器单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15019306/