ConcurrentHashMap有什么缺点吗?

Thi*_*ilo 5 java multithreading hashmap concurrenthashmap java.util.concurrent

我需要一个可以从多个线程访问的HashMap.

有两个简单的选项,使用普通的HashMap并在其上进行同步或使用ConcurrentHashMap.

由于ConcurrentHashMap不会阻止读取操作,因此它似乎更适合我的需求(几乎完全是读取,几乎从不更新).另一方面,我希望无论如何都要求非常低的并发性,因此应该没有阻塞(只是管理锁的成本).

地图也将非常小(十个条目下),如果这有所不同.

与常规HashMap相比,读写操作的成本要高得多(我假设它们是多少)?或者,当可能存在中等级别的并发访问时,ConcurrentHashMap总是更好,无论读取/更新比率和大小如何?

Ste*_*n C 6

另一方面,我希望无论如何都要求非常低的并发性,因此应该没有阻塞(只是管理锁的成本).

获取和释放非对称 Java互斥锁(原始锁定)的成本微乎其微.因此,如果您认为争用的可能性非常低,那么简单HashMap可能是您最好的选择.

但这都是猜想.除非并且直到您实际分析了您的应用程序,否则花在推测优化上的所有时间很可能(*)浪费时间.

*...除非你有一个非常好的直觉.

  • 除非您管理数千个ComcurrentHashMaps,否则开销很小,您永远不会注意到它.我遵循这个原则:如果它将被多个线程访问和更改,请使用ConcurrentHashMap.这使我无法在线程问题上浪费时间,这些问题有时仅在某些小条件下出现,而这些问题并不总是出现在您的个人资料中.@Thilo,这个原则会起作用 (4认同)