ConcurrentHashMap
允许从多个线程中同时修改Map
元素,而不需要阻止它们,但HashMap
阻止整个HashMap
对象而不是阻止它的元素,如ConcurrentHashMap
对吧?
但是,如果一个线程将ConcurrentHashMap
的计数作为10,同时另一个线程从该线程中删除一个项,该怎么办?然后第一个线程计数变为错误吗?
答案 0 :(得分:2)
你问题的答案是最自然的地方,ConcurrentHashMap
的javadoc。
见下文:
检索操作(包括get)一般不会阻塞,因此可能与更新操作重叠(包括put和remove)。 检索反映了最近完成的更新操作的结果 。对于诸如putAll和clear之类的聚合操作,并发检索可能反映仅插入或删除某些条目。类似地,Iterators和Enumerations在迭代器/枚举的创建时或之后的某个时刻返回反映哈希表状态的元素。它们不会抛出ConcurrentModificationException。但是,迭代器被设计为一次只能由一个线程使用。