3

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

4

4 回答 4

7

好吧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 卸载。

于 2013-09-28T15:23:35.187 回答
4

惰性初始化

 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;
    }
 }
于 2013-09-28T15:32:30.673 回答
0

通常在 Singleton 中,这就是您所看到的

 private static YouClass  singleTon ;

--

--

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

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

早期初始化,这意味着

在你的课堂上

  private static YouClass singleTon = new YouClass();

创建实例同时声明它自己。

单例模式维基,阅读类型,

  • 延迟初始化

  • 渴望初始化

  • 静态块初始化

于 2013-09-28T15:23:10.367 回答
0

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

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

以下是链接:

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

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

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

于 2013-09-29T15:34:43.013 回答