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

标签 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 不够聪明而没有意识到它的必要性的情况?我只是想确定一下!

最佳答案

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

关于java - FindBug 说这个并发映射不需要同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16556364/

相关文章:

git - 如何更改“团队资源管理器”选项卡的 "Commit All"按钮

javascript - Jquery 每个函数不适用于字符串索引数组

iteration - SICP - 我对阶乘迭代过程的递归定义不好吗?

java - Struts 1.3 中的 web 应用程序文件夹中的属性文件放在哪里?

java - 如何用真正的多语言字符串做一个应用程序?

java - JPA - 语法错误解析 SELECT GREATEST(c.field, mc.field), LEAST(c.field, mc.field) FROM table

javascript - 循环访问对象时访问属性名称

java - 无法执行 objective-c om.spotify:docker-maven-plugin:1.2.1:build(build-image)

python - 有没有办法不缓冲来自 UDP 套接字的数据

ios - 我应该为 iOS 待办事项应用程序使用 Core Data 吗?