gpt4 book ai didi

java - BlockingQueue 类似不允许重复的容器

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:37 27 4
gpt4 key购买 nike

我想要一个线程安全的容器,它会阻止调用者,直到有项目可用为止。项目将以每秒 1000 秒的速度添加到此容器中,但不会以相同的速度排出。因此,我希望容器不允许重复。我围绕 LinkedBlockingQueue 编写了一个非常简单的包装器,但很快意识到我已经重新创建了经典的生产者-消费者死锁。这是我写的:

public class ActivityListener {
private final BlockingQueue<ID> activeItems = new LinkedBlockingQueue<>();

public synchronized ID take() throws InterruptedException {
return activeItems.take();
}

public synchronized void registerActivity(final ID item) {
if (!activeItems.contains(item)) {
activeItems.add(item);
}
}

public synchronized boolean isItemActive(final ID item) {
return activeItems.contains(item);
}
}

我找不到解决我的问题的既定解决方案,希望得到任何帮助。

最佳答案

重写任何 BlockingQueue 实现的 add() 和 put() 方法,以首先检查元素是否已在队列中。

类似 -

@Override
public boolean add(T obj) {
if (contains(obj))
return true;
return super.add(obj);
}

关于java - BlockingQueue 类似不允许重复的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31350181/

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