首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java的BlockingQueue设计问题

Java的BlockingQueue设计问题
EN

Stack Overflow用户
提问于 2010-11-12 20:10:42
回答 4查看 511关注 0票数 4

方法java.util.concurrent.BlockingQueue.add(E )的JavaDoc是:

布尔加法( e)

如果可以在不违反容量限制的情况下立即将指定的元素插入到此队列中,则在成功时返回true,如果当前没有可用的空间,则会抛出IllegalStateException。当使用容量受限的队列时,通常最好使用提供服务。

我的问题是:它会不会还假?如果不是,为什么此方法返回布尔值?我觉得很奇怪。这背后的设计决定是什么?

谢谢你的知识!

曼纽尔

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-12 20:19:14

它遵循Collection.add(E e)的约定(因为BlockingQueueCollection的一个子类型):

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

票数 5
EN

Stack Overflow用户

发布于 2010-11-12 20:20:17

背后的决定是:快失败。如果队列容量有限,则将抛出IllegalStateException。IllegalStateException是RuntimeException。因此,如果抛出异常,您的应用程序逻辑可能有一个错误,或者您的应用程序逻辑不够防御。或者说:如果您喜欢使用有限的队列,应用程序应该正确地处理它(使用offer代替)。

票数 2
EN

Stack Overflow用户

发布于 2010-11-12 20:19:28

我猜它有一个布尔返回类型,因为它是Queue的一个子接口,该接口还有一个boolean add(E obj)方法(该方法又是从Collection派生的)。某些Queue实现拒绝通过返回false向队列添加对象的尝试。

因此,问题的答案是,BlockingQueue的实现永远不会返回false.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4168654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档