具有非最终实例的线程安全的惰性初始化

问题描述 投票:0回答:1

我已经看到了这个答案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;
    }
}
java multithreading static initialization lazy-loading
1个回答
0
投票

这是IODH(按需初始化方法)惯用语。

但是如果您懒加载的类不是最后? (它具有创建后要调用的一些方法)

您的“ INSTANCE”是否为最终决定并不重要。它将被延迟加载(第一次调用getInstance方法时)。

© www.soinside.com 2019 - 2024. All rights reserved.