3

所以我最近发现了 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 不够聪明而没有意识到这是必要的情况?我只是想确定一下!

4

1 回答 1

3

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

于 2013-05-15T03:36:33.500 回答