我已经看到了这个答案here,该答案显示了如何对静态最终单例执行线程安全的延迟初始化。
但是,如果您懒加载的类不是最终的,最好的解决方案是什么? (它具有创建后要调用的一些方法)
将方法调用放在静态块中是否安全?
public class Something {
private static class LazyHolder {
public static final Something INSTANCE = new Something();
static {
INSTANCE.setValue("foo");
}
}
public static Something getInstance() {
return LazyHolder.INSTANCE;
}
}
这是IODH(按需初始化方法)惯用语。
但是如果您懒加载的类不是最后? (它具有创建后要调用的一些方法)
您的“ INSTANCE”是否为最终决定并不重要。它将被延迟加载(第一次调用getInstance方法时)。