目前我正在处理一个需要
的问题LinkedHashMap
是一个选项,但我需要收集并发。BoundedQueue
这样的功能,但是应该永远不会阻止使用它的线程,而应该删除旧元素并插入新元素。PriorityBlockingQueue
方法的drainTo
是有效选项,但每次插入元素之前我都必须调用它。您能为我建议一个解决方案吗?源代码不是必需的。我想知道解决问题的最佳方法。
提前致谢。
答案 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有所不同。由于这是在持有私有锁时发生的,因此您无法覆盖子类中的行为。