具有固定大小的并发映射

Arn*_*was 13 java concurrency multithreading concurrenthashmap java.util.concurrent

我需要一张符合以下要求的地图:

  1. 它应该是高度并发的.的put(),get()并且remove()方法可同时被多个线程调用.

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

ConcurrentHashMap可能满足#1.但是,不确定如何在ConcurrentHashMap不影响并发性的情况下实现#2 (添加自定义put()方法,只有当大小小于最大大小时才会添加到地图中,需要"同步".这将失败目的使用并发HashMap).

请让我知道你的想法.

Nat*_*hes 6

您可以使用计数信号量来实现委托给ConcurrentHashMap的映射,以限制映射中的项目数.该信号灯类使用原子更新的INT来跟踪许可,这样就不会招致太多额外的开销.

  • 因为你不想阻止,所以在`put`之前使用`semaphore`的`tryAcquire`和`remove`之后的'release`. (2认同)