Java 在什么情况下set.add()会失败?

Java 在什么情况下set.add()会失败?,java,collections,set,Java,Collections,Set,下面是让我困惑的代码: public class BoundedHashSet<T> { private final Set<T> set; private final Semaphore sem; public BoundedHashSet(int bound) { this.set = Collections.synchronizedSet(new HashSet<T>()); sem = new S

下面是让我困惑的代码:

public class BoundedHashSet<T> {
    private final Set<T> set;
    private final Semaphore sem;
    public BoundedHashSet(int bound) {
        this.set = Collections.synchronizedSet(new HashSet<T>());
        sem = new Semaphore(bound);
    }
    public boolean add(T o) throws InterruptedException {
        sem.acquire();
        boolean wasAdded = false;
        try {
            wasAdded = set.add(o);    <-- line 1
            return wasAdded;
        }
        finally {
            if (!wasAdded)    <-- line 2
                sem.release();
        }
    }
    public boolean remove(Object o) {
        boolean wasRemoved = set.remove(o);
        if (wasRemoved)
            sem.release();
        return wasRemoved;
    }
}
公共类BoundedHashSet{
私有最终集;
私有最终信号量;
公共绑定哈希集(int绑定){
this.set=Collections.synchronizedSet(新HashSet());
sem=新信号量(绑定);
}
公共布尔加法(TO)抛出InterruptedException{
sem.acquire();
布尔值wasAdded=false;
试一试{
wasAdded=set.add(o);这里不涉及“失败”

从:

返回: 如果此集合尚未包含指定的元素,则为true


由于您列出的所有原因,它将失败。此外,集合是对象的一个独特集合。如果您添加的对象已经存在,它将返回false。因为您看起来很新:请查看返回值的含义。异常与此代码段不同,在本代码段中并不重要。