Java的BlockingQueue设计问题

Man*_*áoz 4 java blockingqueue

方法java.util.concurrent.BlockingQueue.add(E e)的JavaDoc读取:

布尔加法(E e)

如果可以在不违反容量限制的情况下立即执行此操作,则将指定的元素插入此队列,成功时返回true,如果当前没有可用空间则抛出IllegalStateException.使用容量限制队列时,通常最好使用offer.

我的问题是:它会不会返回虚假?如果没有,为什么这个方法返回一个布尔值?这对我来说似乎很奇怪.这背后的设计决策是什么?

谢谢你的知识!
曼努埃尔

axt*_*avt 5

它遵循Collection.add(E e)(因为BlockingQueue是子类型Collection)的合同:

如果一个集合因为已经包含该元素的原因而拒绝添加特定元素,那么它必须抛出异常(而不是返回false).这保留了在此调用返回后集合始终包含指定元素的不变量.