ConcurrentHashMap和线程

时间:2013-01-17 16:09:34

标签: java concurrenthashmap

ConcurrentHashMap允许从多个线程中同时修改Map元素,而不需要阻止它们,但HashMap阻止整个HashMap对象而不是阻止它的元素,如ConcurrentHashMap对吧?

但是,如果一个线程将ConcurrentHashMap的计数作为10,同时另一个线程从该线程中删除一个项,该怎么办?然后第一个线程计数变为错误吗?

1 个答案:

答案 0 :(得分:2)

你问题的答案是最自然的地方,ConcurrentHashMap的javadoc。

见下文:

  

检索操作(包括get)一般不会阻塞,因此可能与更新操作重叠(包括put和remove)。 检索反映了最近完成的更新操作的结果 。对于诸如putAll和clear之类的聚合操作,并发检索可能反映仅插入或删除某些条目。类似地,Iterators和Enumerations在迭代器/枚举的创建时或之后的某个时刻返回反映哈希表状态的元素。它们不会抛出ConcurrentModificationException。但是,迭代器被设计为一次只能由一个线程使用。