我有一个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;
}
有人可以帮我纠正这个。
答案 0 :(得分:0)
您的代码不正确。在键上进行同步是没有意义的,因为它是一个新构造的本地对象,并且同步映射在操作之间不是原子的。您需要在包含get()
和put()
操作的块中同步地图。