Java 在ConcurrentHashMap上迭代

Java 在ConcurrentHashMap上迭代,java,concurrency,Java,Concurrency,我提到了许多关于ConcurrentHashMap迭代器的链接, 就像谷歌上的任何其他工具,甚至java doc,但我不太明白在迭代Concurrenthashmap并同时修改它时可能会遇到什么样的行为 视图的迭代器[…]保证遍历迭代器构造时存在的元素,并且可以(但不保证)反映构造后的任何修改 如果您对其他迭代器的契约感兴趣,它们也有文档。是的,与常规映射不同,您可以在ConcurrentHashMap上进行迭代,并使用Map.remove(键)删除元素。试试这个测试 Concurren

我提到了许多关于ConcurrentHashMap迭代器的链接, 就像谷歌上的任何其他工具,甚至java doc,但我不太明白在迭代Concurrenthashmap并同时修改它时可能会遇到什么样的行为

视图的迭代器[…]保证遍历迭代器构造时存在的元素,并且可以(但不保证)反映构造后的任何修改


如果您对其他迭代器的契约感兴趣,它们也有文档。

是的,与常规映射不同,您可以在ConcurrentHashMap上进行迭代,并使用Map.remove(键)删除元素。试试这个测试

    ConcurrentHashMap<Integer, Integer> m = new ConcurrentHashMap<>();
    m.put(1, 1);
    m.put(2, 2);
    m.put(3, 3);
    for (int i : m.keySet()) {
        if (i == 2) {
            m.remove(i);
        }
    }
    System.out.println(m);

我想这是“在迭代Concurrenthashmap并同时修改它时,我可能会遇到什么样的行为?”(故意添加了问号)。我认为这不是线程安全的。
{1=1, 3=3}