Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FindBug说这个并发映射不需要同步_Java_Synchronization_Iteration_Findbugs - Fatal编程技术网

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

Java FindBug说这个并发映射不需要同步,java,synchronization,iteration,findbugs,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,但它让我觉得我不知道在几个地方我在做什么。这是其中之一

private Map<String, Object> map = new ConcurrentHashMap<String, Object>();

public void method1(){
    synchronized(map){ // FindBug says this is unnecessary
        for (String keys: map.keySet()){
            ...
        }
    }        
}
private Map=new ConcurrentHashMap();
公共无效方法1(){
synchronized(map){//FindBug说这是不必要的
对于(字符串键:map.keySet()){
...
}
}        
}

我认为我需要同步迭代,或者这是FindBug不够聪明,没有意识到这是必要的吗?我只是想确定一下

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

但锁定是否会阻止元素在我的迭代过程中被添加或删除?您需要同步对映射的任何写入,以在迭代过程中阻止它们,这会破坏SHM的部分好处。“但是,在我的迭代过程中,锁定不阻止元素的添加或删除吗?“不,没有。没用,你能解释得更详细些吗,路易?您所说的似乎是FindBugs警告的根源,但我不明白如果我同步数据结构,它将如何阻止添加/deleting@Jay如果所有添加/删除都是在同步块/方法中完成的,则Smith同步数据结构将仅阻止添加/删除,这将破坏使用
ConcurrentHashMap
的目的。