我的 PropertyLoader 单例线程安全吗?



由于意外的属性值,我收到错误,我正在尝试缩小原因范围。该属性由以下示例类从文件加载:

public final class PropertyLoader {
    private enum Instances{
        ELVIS;
        private final PropertyLoader loader;
        Instances() {
            this.loader = new PropertyLoader();
        }
    }
    private boolean isPropertyEnabled;
    private PropertyLoader() {
        loadProperties();
    }

    public static PropertyLoader getInstance() {
        Instances.ELVIS.loader;
    }
    private void loadProperties() {
        this.isPropertyEnabled = loadPropertyFromFile(FILE, "enabled");
        //... more properties
    }
    public boolean isPropertyEnabled() {
        // eventually returns unexpected value
        return this.isPropertyEnabled;
    }
}

此实现是否线程安全?如果没有,如何在不更改接口的情况下改进实现?是否有有效的策略来测试此类的并发问题?

它是线程安全的。因为所有的初始化基本上都是在类初始化期间完成的。因此,在类加载完成之前,两个线程无法从对象获取数据。

最新更新