【发布时间】:2012-11-21 14:04:20
【问题描述】:
据我了解,从 Java 5 开始的并发哈希映射为您提供了一个线程安全的哈希映射,它不使用阻塞访问进行迭代器和更新(如果并发级别足够的话)。
鉴于以下条件:
- 插入只发生一次(在应用程序初始化期间)。
- 每个线程都有一组要插入的键,这些键不被任何其他线程共享。
- 永远不会更新。
- 只有在应用程序初始化结束后才会进行选择。
使用简单的哈希映射会更好吗?
我的理解是我可能会过得更好,因为我的钥匙不会发生冲突——我可以保证。但是,Java 实现是否有可能通过将同一个桶分配给两个不同的键来搞砸哈希桶?
【问题讨论】:
-
如果有疑问,为什么不直接使用
ConcurrentHashMap? -
@MonsterTruck:如果这只是在启动时,争用对你的伤害有多大?
-
@MonsterTruck:只是为了插入阶段? 50,000 个竞争插入不可能花费半小时。我强烈怀疑发生了其他事情。您可以在多大程度上隔离启动阶段以通过各种方式对其进行测试?
-
@MonsterTruck:开裂。如果花费超过一秒钟,我会感到非常惊讶:)
-
@MonsterTruck:对——这就是重点;插入所花费的时间——无论是否有争议——都应该是微不足道的。这就是让我觉得在“不到 10 分钟”与“超过 40 分钟”的场景中还有其他事情发生的原因。
标签: java concurrency hashmap