并发固定大小集合,具有可配置的删除策略

时间:2013-04-10 09:17:36

标签: java collections concurrency

目前我正在处理一个需要

的问题
  1. 要修复的元素数量。
  2. 如果超出固定大小,则删除上一个元素。删除政策目前已修复
  3. LinkedHashMap是一个选项,但我需要收集并发。
  4. 应该支持像BoundedQueue这样的功能,但是应该永远不会阻止使用它的线程,而应该删除旧元素并插入新元素。
  5. 带有PriorityBlockingQueue方法的
  6. drainTo是有效选项,但每次插入元素之前我都必须调用它。
  7. 您能为我建议一个解决方案吗?源代码不是必需的。我想知道解决问题的最佳方法。

    提前致谢。

2 个答案:

答案 0 :(得分:1)

遏制宝贝。

public class MyCollection {

  private LinkedBlockingQueue<MyData> lbq = new LinkedBlockingQueue<MyData>();
  public static final int MAX_SIZE = 5;

  public void add(MyData input) {
    lbq.put(input);
    if(lbq > MAX_SIZE) lbq.poll();
  }


  ... any other methods you need. 
}

这可能不完全符合您的需求,但这应该让您开始朝着正确的方向前进。您可以使用存在的数据结构,将其包含在一些自定义代码中(包括使其保证线程安全),并且您可以获得所需的内容。

我认为从Effective C ++中学到的设计基本概念是包含优于继承。在这种情况下,它就是解决方案。

答案 1 :(得分:0)

最简单的出发点是查看JDKs LinkedBlockingQueue并创建一个替代实现,该实现与如何处理过量填充put和offer有所不同。由于这是在持有私有锁时发生的,因此您无法覆盖子类中的行为。