方法java.util.concurrent.blockingqueue.add(e e)的javadoc读取:

布尔添加(e e)

如果可以立即插入该队列中的指定元素,而无需违反容量限制,如果当前没有空间,则在成功后返回并抛出IllegalStateException。使用容量限制的队列时,通常最好使用要约。

我的问题是:它会返回错误吗?如果没有,为什么此方法返回布尔值?对我来说似乎很奇怪。这背后的设计决定是什么?

感谢您的知识!
曼努埃尔

有帮助吗?

解决方案

它遵循 Collection.add(E e) (自从 BlockingQueue 是亚型 Collection):

如果收集出于任何原因拒绝添加特定元素,则它已经包含该元素,则必须抛出异常(而不是返回false)。这保留了一个集合始终包含指定元素后的不变性。

其他提示

背后的决定是:失败。如果队列的容量有限,将会抛出非法施加感受。 IllegalStateException是一个RuntimeException。因此,如果抛出异常,您的应用程序逻辑可能会出现故障,或者应用程序逻辑不够防御。或换句话说:如果您想使用有限的队列,您的应用程序应该正确处理(使用 offer 反而)。

我猜它具有布尔返回类型,因为它是 Queue, ,也有一个 boolean add(E obj) 方法(又是从 Collection)。肯定 Queue 实现拒绝通过返回false将对象添加到队列中的尝试。

因此,对您的问题的答案是,Blockingqueue的实现将永远不会返回错误。

该方法返回布尔值,因为它覆盖了 Collection#add(E e).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top