[英]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.