【问题标题】:Difference in HashMap Behaviour in Debug and Normal Release ModeDebug 和 Normal Release 模式下 HashMap 行为的差异
【发布时间】:2015-05-28 07:19:05
【问题描述】:

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

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

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

我不清楚这种行为。是没有提交实例还是我做错了什么。这是我的代码:

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);
    }
}

【问题讨论】:

  • 请输入代码。并详细介绍您的环境。如果您可能同时从多个线程访问此映射,您可能希望使用Map 的并发版本。
  • 我想是你的代码有问题...
  • 添加代码以便于理解

标签: java spring collections hashmap


【解决方案1】:

你真的需要哈希图吗?也许使用一些已经存在的东西,比如公共配置和他们的重新加载策略? https://commons.apache.org/proper/commons-configuration/userguide_v1.10/howto_filebased.html

【讨论】:

  • 基本上,我正在尝试从一个控制器更新属性文件,并希望在其他正在运行的进程中使用它。所以读和写是完全不同的线程。让我知道 apache-commons 配置是否有帮助。
  • 好吧,如果一个线程要修改文件,配置对象也会相应更新,所以只需要从另一个线程访问即可。应该可以。试一试,设置起来很容易。
猜你喜欢
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 2023-03-31
  • 2022-06-20
相关资源
最近更新 更多