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