|
564
|
| Henning · 技术社区 · 17 年前 |
|
1
437
根据您的需要,使用
如果需要确保数据一致性,并且每个线程都需要有地图的最新视图,请使用第二个选项。如果性能非常关键,并且每个线程只向映射插入数据,读取的频率较低,则使用第一个线程。 |
|
|
2
250
关于锁定机制:
|
|
|
3
143
当您进行简单的插入和查找时,这不是什么大问题(除非您进行了非常密集的插入和查找),但当您需要迭代整个映射时,这会成为一个大问题,对于一个大型映射,这可能需要很长的时间-当一个线程执行此操作时,所有其他线程都必须等待,如果他们想要插入或查找任何内容。
|
|
|
4
35
这两者之间的主要区别在于
另一个区别是
此外
有
one post
|
|
|
5
35
当您可以使用ConcurrentHashMap时,它是首选,尽管它至少需要Java5。 它被设计成在多线程使用时可以很好地伸缩。当一次只有一个线程访问Map时,性能可能会稍差,但当多个线程同时访问Map时,性能会显著提高。 blog entry 那是从那本好书中复制出来的一张桌子 Java Concurrency In Practice ,我极力推荐。 只有当您需要使用其他一些特征(可能是某种有序映射,如树形映射)来包装映射时,Collections.synchronizedMap才有意义。 |
|
|
6
14
同步映射:
ConcurrentHashMap:
与哈希表和同步映射不同,它从不锁定整个映射,而是将映射划分为段,并对这些段执行锁定。如果读线程的数量大于写线程的数量,它的性能会更好。 默认情况下,ConcurrentHashMap被分成16个区域,并应用锁。可以在初始化ConcurrentHashMap实例时设置此默认值。在特定段中设置数据时,将获得该段的锁定。这意味着,如果两个更新都影响单独的存储桶,那么它们仍然可以安全地同时执行,从而最小化锁争用,从而最大限度地提高性能。
如果一个线程试图修改ConcurrentHashMap,而另一个线程正在对其进行迭代,则ConcurrentHashMap不会抛出ConcurrentModificationException synchornizedMap和ConcurrentHashMap之间的差异
ConcurrentHashMap不允许空键或空值,而同步HashMap允许一个空键。 类似链接 |
|
|
7
13
在里面
|
|
|
8
12
|
|
|
9
9
你说得对
Your article 提到虽然HashTable和synchronized wrapper类通过一次只允许一个线程访问映射来提供基本的线程安全性,但这不是“真正的”线程安全性,因为许多复合操作仍然需要额外的同步,例如:
|
|
|
10
7
此文本来自 Difference between ConcurrentHashMap and hashtable in Java |
|
|
11
7
|
|
12
6
ConcurrentHashMap
Collection.synchronizedMap()
|
|
|
13
4
ConcurrentHashMap针对并发访问进行了优化。
|
|
|
14
4
有
一个关键特征
注意
|
|
|
15
3
|
|
|
16
2
通常,如果要使用
|
|
|
17
1
在ConcurrentHashMap中,同步的方式略有不同。ConcurrentHashMap没有将每个方法都锁定在一个公共锁上,而是对单独的存储桶使用单独的锁,从而只锁定映射的一部分。 |
|
|
18
1
ConcurrentHashMap在Java1.5中作为Hashtable的替代方案作为并发包的一部分提供。使用ConcurrentHashMap,您不仅可以在并发多线程环境中安全地使用它,而且还可以提供比Hashtable和synchronizedMap更好的性能,这是一个更好的选择。ConcurrentHashMap性能更好,因为它锁定了Map的一部分。它允许并发读操作,同时通过同步写操作保持完整性。 ConcurrentHashMap是如何实现的ConcurrentHashMap是作为Hashtable的替代品开发的,它支持Hashtable的所有功能,并具有额外的能力,即所谓的并发级别。ConcurrentHashMap允许多个读卡器在不使用块的情况下同时读取。通过将地图分为不同的部分,并在更新中仅阻止地图的一部分,这就成为可能。默认情况下,并发级别为16,所以映射分为16个部分,每个部分由单独的块管理。这意味着,如果16个线程处理Map的不同部分,那么它们可以同时处理Map。它使ConcurrentHashMap具有更高的生产效率,而不是降低线程安全性。 如果您对ConcurrentHashMap的一些重要特性感兴趣,并且您应该在什么时候使用这个Map的实现,那么我只提供了一个指向一篇好文章的链接- How to use ConcurrentHashMap in Java |
|
19
0
除了建议之外,我还想发布与此相关的源代码
作出决定
实施
它使得
|
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
H3007 · 并发运行python子进程似乎不是并发的 2 年前 |
|
|
The Oddler · TVar会阻止读取直到更改吗? 2 年前 |
|
|
Wang Tuma · 使用信号量的c++并发问题:按顺序打印 2 年前 |
|
|
Marcel Batista · 在不同线程中更新密钥时的字典线程安全 2 年前 |
|
|
rico · 当volatile关键字真的是必要的? 2 年前 |