Java 具有可配置删除策略的并发固定大小集合
目前我正在处理一个需要Java 具有可配置删除策略的并发固定大小集合,java,collections,concurrency,Java,Collections,Concurrency,目前我正在处理一个需要 要固定的元素数 如果上一个图元超过固定大小,则删除它。删除策略目前是固定的 LinkedHashMap是一个选项,但我需要同时收集 应该支持像BoundedQueue这样的功能,但是不应该阻止包含它的线程,而应该删除旧元素并插入新元素 PriorityBlockingQueuewithdrainTo方法是有效的选项,但每次插入元素之前,我都必须调用它 你能给我一个解决方案吗。源代码不是必需的。我只想知道解决这个问题的最好办法 提前谢谢。宝贝 public class My
LinkedHashMap
是一个选项,但我需要同时收集BoundedQueue
这样的功能,但是不应该阻止包含它的线程,而应该删除旧元素并插入新元素PriorityBlockingQueue
withdrainTo
方法是有效的选项,但每次插入元素之前,我都必须调用它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.
}
公共类MyCollection{
私有LinkedBlockingQueue lbq=新LinkedBlockingQueue();
公共静态最终int MAX_SIZE=5;
公共作废添加(MyData输入){
lbq.put(输入);
如果(lbq>MAX_SIZE)lbq.poll();
}
…您需要的任何其他方法。
}
这可能并不完全符合您的需求,但这应该会让您朝着正确的方向开始。您可以使用现有的数据结构,使用一些自定义代码对其进行包装(包括使其线程安全),然后您就可以得到所需的数据结构
设计中的一个基本概念,我认为从有效C++中学习的是,包容优于继承。在本例中,这就是解决方案。
最简单的起点是查看JDK LinkedBlockingQueue,并创建一个替代实现,该实现在如何处理过度填充put和offer方面有所不同。由于这是在持有私有锁时发生的,因此您不能重写子类中的行为。这看起来不像它可以处理同时的add
s。正如我所说:“这可能不完全符合您的需要”。我很肯定@AmitD知道他在开发软件方面做了什么。我这篇文章的目的是让他朝着正确的方向开始,他可以从那里开始。我可能提供了太多的信息,但这是为了让其他没有那么有成就的人获得一些见解。