所以我最近发现了FindBug,但它让我觉得我不知道我在几个地方做了什么。这是其中之一
private Map<String, Object> map = new ConcurrentHashMap<String, Object>();
public void method1(){
synchronized(map){ // FindBug says this is unnecessary
for (String keys: map.keySet()){
...
}
}
}
我认为我需要同步迭代,或者这是FindBug的情况还不够智能,无法实现它的必要性?我只是想确定一下!
答案 0 :(得分:3)
ConcurrentHashMap
的迭代器是“弱一致的”,意味着它们反映了迭代器创建时的映射状态,但可能无法反映迭代器创建后对映射所做的修改;换句话说,迭代器不会抛出ConcurrentModificationException,
,因此您可能不需要锁定底层地图。