方法java.util.concurrent.BlockingQueue.add(E )的JavaDoc是:
布尔加法( e)
如果可以在不违反容量限制的情况下立即将指定的元素插入到此队列中,则在成功时返回true,如果当前没有可用的空间,则会抛出IllegalStateException。当使用容量受限的队列时,通常最好使用提供服务。
我的问题是:它会不会还假?如果不是,为什么此方法返回布尔值?我觉得很奇怪。这背后的设计决定是什么?
谢谢你的知识!
曼纽尔
发布于 2010-11-12 20:19:14
它遵循Collection.add(E e)的约定(因为BlockingQueue是Collection的一个子类型):
如果集合拒绝添加特定元素,而不是由于它已经包含元素的原因,则必须抛出异常(而不是返回false)。这保留了集合在此调用返回后始终包含指定元素的不变量。
发布于 2010-11-12 20:20:17
背后的决定是:快失败。如果队列容量有限,则将抛出IllegalStateException。IllegalStateException是RuntimeException。因此,如果抛出异常,您的应用程序逻辑可能有一个错误,或者您的应用程序逻辑不够防御。或者说:如果您喜欢使用有限的队列,应用程序应该正确地处理它(使用offer代替)。
发布于 2010-11-12 20:19:28
我猜它有一个布尔返回类型,因为它是Queue的一个子接口,该接口还有一个boolean add(E obj)方法(该方法又是从Collection派生的)。某些Queue实现拒绝通过返回false向队列添加对象的尝试。
因此,问题的答案是,BlockingQueue的实现永远不会返回false.
https://stackoverflow.com/questions/4168654
复制相似问题