【发布时间】:2011-09-15 03:38:45
【问题描述】:
我们知道 ConcurrentHashMap 可以提供对多个线程的并发访问以提高性能,并且在这个类中,段是同步的(我说的对吗?)。问题是,这种设计能保证线程安全吗?假设我们有 30 多个线程访问和更改由 ConcurrentHashMap 实例中的相同键映射的对象,我的猜测是,他们仍然需要排队,不是吗?
根据我的回忆,“Java 并发实践”一书说 ConcurrentHashMap 提供并发读取和相当水平的并发写入。在上述场景中,如果我的猜测是正确的,那么性能不会比使用 Collection 的静态同步包装器 api 更好吗?
感谢您的澄清, 约翰
【问题讨论】:
-
[我将我的答案放在评论中,因为我不能 100% 确定我声称的内容。] ConcurrentHashMap 比包装器更快的原因有两个:A) ConcurrentHashMap 可以 read 不加锁,B) 它是用并发原子变量构造的,它使用较新的 cpu 缓存同步操作(“条件更新”),这可以比旧的同步方法快得多。
标签: java multithreading concurrency concurrenthashmap