【问题标题】:Frequently Used Hash Maps But With Concurrency经常使用的哈希映射,但具有并发性
【发布时间】:2011-11-18 06:58:16
【问题描述】:

我回到之前的问题:Frequently Used metadata Hashmap

但是,这一次我将如何调整该解决方案以与 ConcurrentMap 一起使用? LinkedHashMap 不是同步集合,由于性能原因,我不想将它包装在 sycronizedMap 中。有没有替代的[并发友好]解决方案来解决这个问题?

最初的问题是我需要一个哈希映射,在这么多条目之后删除最少使用的项目。

【问题讨论】:

  • 如果将其包装在 synchronizedMap 中,您真的会遇到性能问题吗?或者这是premature optimisation的情况?
  • 为什么不使用ConcurrentHashMap from java.util.concurrent
  • 我不必测试 sychMap 的性能……Gorrtz/Bloche 等人在 Currencency in Practice 中有一个基准。 concurrentmap 的设计比较不同。
  • ConcurrentHashMap 特别有用,因为您有多个线程并且它们所做的只是访问一个 Map。如果您有多个线程,它们大部分时间都在做其他事情。即有两个线程尝试访问同一个映射的时间百分比相对较低,那么您使用哪个线程并不重要。

标签: java multithreading performance concurrency


【解决方案1】:

Guava MapMakerCacheBuilder 类可以使用 LRU 驱逐策略生成并发映射。

CacheBuilder 类是缓存用例的首选,因为 Guava 开发人员正在从 MapMaker 中剥离缓存支持方法。

【讨论】:

  • CacheBuilder 是 MapMaker 的替代品,应该是首选。
  • 我会接受这个答案,只是因为它会导致 CacheBuilder。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多