繁体   English   中英

在Singleton中如何进行延迟初始化?

[英]How does lazy initialization happen in Singleton?

任何人都可以解释在以下单例模式代码中如何进行延迟初始化?

public class Singleton 
{ 
  private static Singleton INSTANCE = null; 
  private Singleton() {} 
  public static Singleton getInstance() 
  { 
    if (INSTANCE == null) 
       INSTANCE = new Singleton(); 
    return INSTANCE; 
  } 
}

第一次调用getInstance()INSTANCE为null,并使用INSTANCE = new Singleton();初始化它INSTANCE = new Singleton(); 如果从未使用过,则具有不初始化实例的优点。

如果可以由多个线程访问,则应该将此代码改进为线程安全的。

延迟意味着第一次使用时初始化实例。

这是一个渴望的例子,它在使用之前已初始化。

public class Singleton 
{ 
  private static Singleton INSTANCE = new Singleton(); 
  private Singleton() {} 
  public static Singleton getInstance() 
  { 
    return INSTANCE; 
  } 
}

在初始化类时才创建实例,并且仅在调用getInstance时才初始化类。

您可能想要访问JLS - 12.4.1。 发生初始化时

类或接口类型T将在第一次出现以下任何一个之前立即初始化:

T是一个类,并且创建了T的实例。

T是一个类,并且调用由T声明的静态方法。

分配由T声明的静态字段。

使用由T声明的静态字段,该字段不是常量变量(第4.12.4节)。

T是顶级类(第7.6节),并且执行在词典内嵌套在T(第8.1.3节)内的断言语句(第14.10节)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM