我想要一个线程安全的容器,阻止调用方,直到项目变得可用。物品将以每秒1000秒的速度添加到此容器中,但不会以相同的速度排出。因此,我希望容器不允许重复。 我写了一个关于LinkedBlockingQueue的简单包装,但很快就意识到我已经重新创建了经典的生产者 - 消费者的死锁。这是我写的:BlockingQueue像容器,不允许重复
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);
}
}
我找不到一个既定的解决我的问题,并希望得到任何帮助。
你需要一个_full_的BlockingQueue的实现,或只是'把()'和'采取()'? – jtahlborn
我只需要把和 – user1071840
可能的重复:http://stackoverflow.com/questions/3120495/concurrent-set-queue – wickstopher