具有固定大小的并发映射

我需要一张具有以下要求的地图:

  1. 它应该是高度并发的。和 方法可以由多个线程同时调用。put()get()remove()

  2. 它应该是固定的。如果大小达到最大值(例如10000),则不允许在地图中添加新条目。它不能是LRU缓存,其中最旧的条目在达到最大大小时被删除。HashMap

ConcurrentHashMap可能满足#1。但是,不确定如何在不影响并发的情况下实现#2(添加一个自定义方法,仅当大小小于最大大小时才会添加到映射中,需要“同步”。这将破坏使用并发的目的)。ConcurrentHashMapput()HashMap

请让我知道你的想法。


答案 1

您可以实现委托给 ConcurrentHashMap 的映射,使用计数信号量来限制映射中的项目数。Semaphore 类使用原子更新的 int 来跟踪许可证,因此它不会产生太多额外的开销。


答案 2

你可以自己做所有这些,Java SE武器库本身可能会提供你需要的东西,但我强烈建议使用一种更简单,更具可扩展性的方法,因为自己做所有这些工作就是重新发明轮子。在内存数据网格中尝试以下方法之一:

例如,在ehcache中,您可以通过类似于以下内容的配置来实现所需的内容:

<cache 
 name="myCache"
 maxElementsInMemory="10000"
 eternal="true"
 overflowToDisk="false" />

推荐