我对这里提到的工厂构造函数示例有些疑问(https://www.dartlang.org/guides/language/language-tour#factory-constructors)。我知道在基本级别上只有三种类型的构造函数-默认,命名和参数化。
这里最近的一个问题有以下代码(好吧,类似于这个)来实现没有同步的单例.
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想了解这是做什么的.由于实例是static final,它建立在任何线程调用之前很久,getInstance()所以不需要同步.
只有当两个线程试图同时调用时才需要同步getInstance()(并且该方法在第一次调用"static final"时而不是在第一次调用时进行构建).
因此我的问题基本上就是:为什么你会喜欢懒惰的单身人士建构:
public class Singleton {
private Singleton() {}
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
我唯一的想法是使用该static final方法可能会引入排序问题,如C++静态初始化顺序惨败.
首先,Java实际上 …