使用Hashmaps时,并根据键访问该值

时间:2012-06-07 01:02:44

标签: java hashmap

我有一个HashMap,它基本上试图根据对象的名称存储对象作为键。但是,第一次HashMap中的对象尚未存在而不是重新调整null时,它会返回object。因此,它永远不会创建一个新对象,并且永远不会将其放入HashMap - 我希望它返回null

这是我的代码......

private static Map<String, SObj> MComponentCache = Collections.synchronizedMap(new HashMap<String, Sobj>());

    static SObj getSObj(String cName) {
        SObj cmp = null;
        String pKey = "Component:" + cName.intern();
        cmp = MComponentCache.get(cName);
        synchronized (pKey){
            if (cmp == null){
                cmp = new SObj(cName);
                MComponentCache.put(cName, cmp);
            }
        }
        return cmp;
    }

有人可以帮我纠正这个。

1 个答案:

答案 0 :(得分:0)

您的代码不正确。在键上进行同步是没有意义的,因为它是一个新构造的本地对象,并且同步映射在操作之间不是原子的。您需要在包含get()put()操作的块中同步地图。