并发阻止映射与条目驱逐

时间:2013-12-27 13:22:10

标签: java collections concurrency guava

我需要的是一个相当复杂的数据结构,具有以下要求:

  1. 它应支持并发读/写而不会过度锁定(如java.util.concurrent.ConcurrentHashMap

  2. 它应该有容量限制并在达到限制后阻止(就像BlockingQueue实施一样)

  3. 它应该具有有效的搜索机制,例如Map / HashSet:给定对象的ID,我需要能够在没有顺序扫描的情况下找到它。

  4. 应该可以在超时时逐出元素,例如:如果条目在X分钟之前放入此结构中,则应自动删除。

  5. 当然,我总是有机会自己实现它,但我更愿意找到现有的,优化的和经过充分测试的。

    唯一接近的是Guava的缓存,但似乎缺少#2。关于已知实现的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以编写一个简单的BlockingCache,它包装现有的Guava Cache并检查put操作的容量,因此put看起来像这样:

public V put(K key, V value)
{
    while (size() >= capacity) Thread.sleep(100);
    return innerCache.put(key, value);
}