java - 关于静态保持器单例模式

标签 java

我已经根据条件以多种方式开发了单例,例如 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 个好处:

  1. 静态工厂
  2. 延迟初始化
  3. 线程安全

JVM 推迟初始化 InstanceHolder 类,直到它被实际使用,并且因为 Singleton 是使用静态初始化器初始化的,所以不需要额外的同步。任何线程对 getInstance 的第一次调用会导致 InstanceHolder 被加载和初始化,此时 Singleton 的初始化通过静态初始化程序发生。

静态持有人模式也被认为是双重检查锁定反模式的最聪明的替代品。

关于java - 关于静态保持器单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15019306/

相关文章:

java - 如何向 EJB 3.0 服务器验证应用程序客户端的身份

java - Optaplanner 从工作的 VRP 解决方案中删除客户

java - Frame.getContentPane().setBackground(Color.black) 没有

java - 在 Swing 中创建组件,其中文本字段仅采用日期类型值

java - 如何从代码生成jar文件?

java - getResourceAsStream 为 txt 文件返回 null 但对图像有效

java - 查找错误: parcelable BadParcelableException

java - Android错误:找不到符号类LocationClient

java - 在 Hibernate 中更新连接子类

java - 如何在java中找到时间持续时间之间的差异?