gpt4 book ai didi

java - 有界、自动丢弃、非阻塞、并发收集

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:01 25 4
gpt4 key购买 nike

我正在寻找一个集合:

  • 是一个 Deque/List - 即支持在“顶部”插入元素(最新的项目到顶部) - deque.addFirst(.. )/list.add(0, ..)。它可以是一个 Queue,但迭代顺序应该是相反的 - 即最近添加的项目应该排在第一位。
  • 是有界的——即限制为 20 件
  • 在达到容量时自动丢弃最旧的项目(那些“位于底部”,首先添加的项目)
  • 非阻塞——如果双端队列为空,检索不应阻塞。如果双端队列已满,它也不应阻止/返回 false/null/抛出异常。
  • 并发 - 多个线程应该能够对其进行操作

我可以采用 LinkedBlockingDeque 并将其包装到我的自定义集合中,在 add 操作中检查大小并丢弃最后一项。有更好的选择吗?

最佳答案

我做了这个简单的实现:

public class AutoDiscardingDeque<E> extends LinkedBlockingDeque<E> {

public AutoDiscardingDeque() {
super();
}

public AutoDiscardingDeque(int capacity) {
super(capacity);
}

@Override
public synchronized boolean offerFirst(E e) {
if (remainingCapacity() == 0) {
removeLast();
}
super.offerFirst(e);
return true;
}
}

对于我的需要这就足够了,但它应该是与 addFirst/offerFirst 不同的有据可查的方法,它们仍然遵循阻塞双端队列的语义。

关于java - 有界、自动丢弃、非阻塞、并发收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com