sort of like a \"blocking set\". How can I implement a blocking queue where adding a member that is already in the set is ignored?
You can override add and put methods of any implementation of BlockingQueue to check first if the element is already within the queue, e.g.
BlockingQueue
@Override public boolean add(T elem) { if (contains(elem)) return true; return super.add(elem); }