调试和正常释放模式下HashMap行为的差异

时间:2015-05-28 07:19:06

标签: java spring collections hashmap

我需要在不重新启动服务器的情况下从属性文件中动态地将键和值添加到hashmap中。所以我在我的对象中创建了一个静态hashmap,它在服务器启动时从文件加载数据。因此,在后续添加属性时,我将更新此hashmap。这是我的HashMap实例化。

private static Map<String, String> map = new HashMap<>();

所以现在,当我添加一个属性时,我初始化地图,现在如果我执行我的main方法,因为它是一个相同的类加载器,当我在DEBUG模式下查看时,我仍然在地图中看到一个新值。 例如:如果我将Europe = EU添加为新属性,我会在调试模式下看到此值,其他属性为[Europe = EU,India = IN],如果我运行了line map.get(&#34; Europe&#34) ;)我得到的值为null。

我不清楚这种行为。是不是承诺实例或我做错了什么。这是我的代码:

public class CountryMap {

    private static Map<String, String> map = new HashMap<>();

    private static final CountryMap countrymap = new CountryMap();

    static {
        initmap();
    }

    private static void initmap() {
        IPropertyReader reader = (IPropertyReader) MyAppContext
                .getInstance().getBean("propreader"); //To read from location  files
        try {
            Properties props = reader.loadPropertyFile();
            Set<Entry<Object, Object>> propset = props.entrySet();
            for (Entry<Object, Object> entry : propset) {
                map.put((String) entry.getKey(),
                        entry.getValue().toString());
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
     }

    public static CountryMap getInstance() {
        return countrymap;
    }

    public String getvalue(String key) {
        return map.get(key);
    }

    public void addtomap(String key, String value) {
        map.put(key, value);
    }
}

1 个答案:

答案 0 :(得分:1)

你真的需要一个hashmap吗?也许选择已经存在的东西,如公共配置和重新加载策略? https://commons.apache.org/proper/commons-configuration/userguide_v1.10/howto_filebased.html