我对Java和堆栈溢出很陌生,我正在从经验丰富的人员那里寻求答案,他们曾经从事过Collections的工作。
我读到hashTable是线程安全的,concurrentHashMap也是安全的,但是concurrentHashMap比hashTable更快,因为它为访问线程提供了映射段的锁。
这在内部是如何工作的?如何确定分段的大小?示例:如果concurrentHashMap中有40个条目,并且有3个线程试图检索/修改数据,那么如何确定分段呢?
任何关于这方面的图片/解释/代码都会非常棒。提前谢谢。
发布于 2014-12-22 17:22:17
concurrentHashMap -无锁算法.读写操作之间没有同步。根据java Doc
一个哈希表,支持检索的完全并发性和可调整的预期并发性以进行更新。该类遵循与Hashtable相同的功能规范,并包含对应于Hashtable的每个方法的方法的版本。然而,即使所有操作都是线程安全的,检索操作也不需要锁定,也不支持以阻止所有访问的方式锁定整个表。这个类完全可以在依赖线程安全的程序中与Hashtable互操作,但不依赖于它的同步细节。
HashTable -一切都是同步的。它在读写操作之间完全同步
https://stackoverflow.com/questions/27607386
复制相似问题