ConcurrentHashMap和Hash表的区别

时间:2014-12-22 17:18:33

标签: java multithreading

我是Java和stackoverflow的新手,我正在寻找那些参与过Collections Framework的经验丰富的人的回答。

我读到hashTable是线程安全的,并且concurrentHashMap也是如此,但是concurrentHashMap比hashTable更快,因为它将地图段锁定到访问线程。

这在内部如何运作?段的大小如何决定?示例:如果concurrentHashMap中有40个条目,并且3个线程试图检索/修改数据,那么将如何确定这些段?

任何图像/解释/代码都非常棒。提前谢谢。

1 个答案:

答案 0 :(得分:-1)

concurrentHashMap - 无锁算法。读或写操作之间没有同步。 根据java Doc

  

支持检索的完全并发和可调整的哈希表   预期的更新并发性。本课程遵循相同的功能   规范为Hashtable,包括方法版本   对应于Hashtable的每种方法。但是,尽管如此   操作是线程安全的,检索操作不需要   锁定,并没有任何支持锁定整个表   一种阻止所有访问的方法。这个类可以完全互操作   Hashtable在程序中依赖于其线程安全但不依赖于它   同步细节。

HashTable - 一切都是同步的。它在读写操作之间完全同步