【问题标题】:What is meant by early initialization of a Singleton class in JavaJava中单例类的早期初始化是什么意思
【发布时间】:2013-09-28 15:20:41
【问题描述】:

我不太清楚 Singleton 类的早期初始化一词是什么意思。了解单例类的生命周期也会有所帮助。

【问题讨论】:

    标签: java singleton lifecycle


    【解决方案1】:

    Lazy initialization 的意思是你在第一次使用对象之前不会初始化它们。

    Early initialization 正好相反,你在加载类时预先初始化一个单例。

    有一些方法可以进行早期初始化,一种是将你的单例声明为static

    以下为例:

    public class SingletonClassEarly {
        private static SingletonClassEarly sce = new SingletonClassEarly();
        private SingletonClassEarly() {} // make it private
    
        public static SingletonClassEarly getInstance() {
            return sce;
        }
    }
    

    根据生命周期,这个单例是在 JVM 启动和类初始化之后加载的。它在关闭/退出时被 JVM 卸载。

    【讨论】:

    • 嗨 Anubhava,还有什么其他的早期初始化方法
    • @upog: 使用Enum 是另一种方式,或者使用像 Spring 这样的框架注入单例。
    【解决方案2】:

    延迟初始化

     class SingletonClass {
    
         private static SingletonClass object;
         private SingletonClass () {} 
         public static SingletonClass getInstance(){
            if(object == null){
                object= new SingletonClass (); //Lazy Initalizaion 
            }
            return object;
        }
     }
    

    早期初始化

      class SingletonClass {
    
         private static SingletonClass object = new SingletonClass (); //Early initialization
         private SingletonClass () {} 
    
         public static SingletonClass getInstance(){
            return object;
        }
     }
    

    【讨论】:

      【解决方案3】:

      通常在单例中,这就是你所看到的

       private static YouClass  singleTon ;
      
      --
      
      --
      
          public static YouClass getInstance(){
                  if(singleTon  == null){
                      singleTon  = new YouClass();
                  }
                  return singleTon  ;
              }
      

      在这种情况下,当您第一次调用 getInstance() 时,只会创建 YouClass 实例。

      早期初始化,也就是说

      在你的课堂上

        private static YouClass singleTon = new YouClass();
      

      在声明自己的同时创建实例。

      来自Singleton pattern wiki ,读取类型,

      • 延迟初始化

      • 渴望初始化

      • 静态块初始化

      【讨论】:

        【解决方案4】:

        感谢大家的解释。这有助于回答我的问题。

        我还发现了一些有用的博客文章,其中更详细地介绍了不同方法的工作原理。

        以下是链接:

        http://howtodoinjava.com/2012/10/22/singleton-design-pattern-in-java/

        下一篇文章帮助解释使用双重检查方法时 volatile 关键字的使用:

        http://javarevisited.blogspot.com/2011/06/volatile-keyword-java-example-tutorial.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-07-17
          • 2011-06-10
          • 2012-02-10
          • 2018-12-26
          • 1970-01-01
          • 2013-07-16
          • 2010-09-10
          相关资源
          最近更新 更多