Java:多线程映射:实现如何比较?

Dan*_*ein 6 java multithreading hashmap

我正在寻找一个好的哈希映射实现.具体来说,一个有利于创建大量地图的地图,其中大多数都很小.所以记忆是一个问题.它应该是线程安全的(虽然丢失奇数放置可能是一个好的妥协,以换取更好的性能),并且快速的get和put.而且我也喜欢用棍子上的月亮,请带着正义的副本.

我知道的选项是:

  • HashMap中.灾难性的非线程安全.

  • ConcurrentHashMap的.我的第一选择,但这有很大的内存占用 - 每个实例大约2k.

  • Collections.sychronizedMap(HashMap的).这对我来说很合适,但我确信必须有更快的选择.

  • Trove或Colt - 我认为这些都不是线程安全的,但也许代码可以适应线程安全.

还有其他人?什么时候打什么什么的建议?任何真正好的新哈希映射算法,Java可以使用它的实现?

提前感谢您的意见!

cle*_*tus 6

Collections.synchronizedMap()简单地制作所有Map方法synchronized.

ConcurrentMap真的是你想要的接口有几种实现方式(例如ConcurrentHashMap,ConcurrentSkipList).它有几个Map对线程安全操作不重要的操作.此外,它比同步更精细,Map因为操作只会锁定一部分支持数据结构而不是整个事物.


bma*_*ies 0

嗯,Apache Mahout 中有一辆打扮得漂漂亮亮的柯尔特。这仍然不是目前的业务。使用同步块保护代码有什么问题?您是否期待一些极其复杂的方案,其持有的锁定粒度小于putget

如果您可以编写代码,请将其贡献给 Mahout。