我是Java和stackoverflow的新手,我正在寻找那些参与过Collections Framework的经验丰富的人的回答。
我读到hashTable是线程安全的,并且concurrentHashMap也是如此,但是concurrentHashMap比hashTable更快,因为它将地图段锁定到访问线程。
这在内部如何运作?段的大小如何决定?示例:如果concurrentHashMap中有40个条目,并且3个线程试图检索/修改数据,那么将如何确定这些段?
任何图像/解释/代码都非常棒。提前谢谢。
答案 0 :(得分:-1)
concurrentHashMap - 无锁算法。读或写操作之间没有同步。 根据java Doc
支持检索的完全并发和可调整的哈希表 预期的更新并发性。本课程遵循相同的功能 规范为Hashtable,包括方法版本 对应于Hashtable的每种方法。但是,尽管如此 操作是线程安全的,检索操作不需要 锁定,并没有任何支持锁定整个表 一种阻止所有访问的方法。这个类可以完全互操作 Hashtable在程序中依赖于其线程安全但不依赖于它 同步细节。
HashTable - 一切都是同步的。它在读写操作之间完全同步