我正在经历ConcurrentHashMap
和this related tutorial,并且有一些问题。关于并发hashmap的内部工作
在这篇文章中,有人提到,
ConcurrentHashMap
允许多个读者没有任何阻挡同时读取。这是通过将Map分成基于并发级别的不同部分以及在更新过程中仅锁定一部分Map来实现的。缺省并发级别为16,因此Map分为16部分,每部分由不同的锁定进行管理。这意味着,16个线程可以同时在Map上操作,直到它们在Map的不同部分上运行。尽管保持了线程安全性,但这使得ConcurrentHashMap
具有高性能。虽然,它带有一个警告:这样以来put()
,remove()
,putAll()
或clear()
更新操作不同步,并发检索可能不反映在地图上另外一点,文章中也提到了最近的变化: 另一个要记住的重点是对CHM的迭代,由
keySet
返回的迭代器是弱一致的,它们只反映ConcurrentHashMap
的状态,并不一定反映任何最近的变化。
我还没有理解以粗体突出显示的几点,你能否提供更多信息或者在简单的程序中显示我?
这给了回答您的第一个问题:http://stackoverflow.com/questions/14947723/is-concurrenthashmap-totally-safe/14947818#14947818可以 – 2013-02-27 17:27:58