gpt4 book ai didi

java - 优先级并发队列,当大小达到队列容量时删除最低优先级元素

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

我使用 PriorityBlockingQueue .它是线程安全的并且允许优先级。但我需要以下功能:

当新元素添加到队列并且队列大小等于容量时,第一个(最低优先级)元素将被删除。有没有满足我要求的队列?

最佳答案

没有集契约(Contract)时提供排序、并发和有限容量,因此您必须选择其中两个功能并为第三个添加手写解决方案。

然而,使用 PriorityBlockingQueue 检查大小是微不足道的,并且同样是线程安全的:

while (myQueue.size() >= THRESHOLD) {
Element e = myQueue.poll();
if (e != null) {
process(e);
}
}
myQueue.add(newElement);

现在受过良好教育的多线程程序会立即发现我选择的非线程安全实现(仅计数,列表始终是线程安全的),但这可能没问题。可能发生的最糟糕的事情是,队列被最多请求的线程数减去一个限制。因此,如果有 4 个线程,队列可能会达到 limit + 3,而如果有 100 个线程,队列可能会达到 limit + 99。

现在,根据您使用的线程数以及保持在限制以下的重要性,您可以做 3 件事:

  1. 接受有时会违反限制。
  2. 如果您只有几个线程,请将限制设置为实际限制减去线程数。
  3. 添加一个同步变体以确保只有一个线程在运行上述指令。

关于java - 优先级并发队列,当大小达到队列容量时删除最低优先级元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19949173/

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