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