-2

我有一个HashMap基本上尝试根据对象名称作为键来存储对象的方法。但是,当对象第一次不存在时,HashMap而不是重新调整我 anull它返回一个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;
    }

谁能帮我纠正这个问题。

4

1 回答 1

0

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

于 2012-06-07T01:42:21.430 回答