FindBug说这个并发映射不需要同步

时间:2013-05-15 03:32:40

标签: java synchronization iteration findbugs

所以我最近发现了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的情况还不够智能,无法实现它的必要性?我只是想确定一下!

1 个答案:

答案 0 :(得分:3)

ConcurrentHashMap的迭代器是“弱一致的”,意味着它们反映了迭代器创建时的映射状态,但可能无法反映迭代器创建后对映射所做的修改;换句话说,迭代器不会抛出ConcurrentModificationException,,因此您可能不需要锁定底层地图。