在 javadoc 中,ConcurrentHashMap的代码如下:
检索操作(包括 get)通常不会阻塞,因此可能与更新操作(包括 put 和 delete)重叠。检索反映了最近完成的更新操作在开始时的结果。对于 putAll 和 clear 之类的聚合操作,并发检索可能只反映某些条目的插入或删除。类似地,迭代器和枚举返回元素,这些元素反映在迭代器/枚举创建之时或之后哈希表的某个时刻的状态。它们不引发 ConcurrentModficationException。但是,迭代器一次只能由一个线程使用。
这是什么意思?如果我尝试同时用两个线程迭代映射会发生什么?如果在迭代映射时从映射中放入或移除一个值,会发生什么情况?