我想要一個線程安全的容器,阻止調用方,直到項目變得可用。物品將以每秒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