首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinkedBlockingQueue -生产者/消费者

LinkedBlockingQueue -生产者/消费者
EN

Stack Overflow用户
提问于 2016-04-22 20:22:19
回答 2查看 157关注 0票数 0

在一个简单的生产者-消费者场景中,我有两个线程围绕一个LinkedBlockingQueue进行管理。

在消费者线程中,我使用take(),即当一个元素进入队列时,我想阻塞消费者。

如果在生产者线程中,我使用offer()而不是put()来添加到队列中,可以吗?这会造成什么问题吗?

我的意思是,使用take()是否意味着我也应该使用put

我想不是,但我想要完全确定。

EN

回答 2

Stack Overflow用户

发布于 2016-04-22 20:30:53

不,无论你在消费者端使用什么,在生产者上使用offer都是没有问题的。

这将是一种常见的机制,允许生产者推送到许多队列中的一个,它可以在每个队列上调用offer,直到它成功为止。它甚至可以在最后一个队列中调用put

票数 1
EN

Stack Overflow用户

发布于 2016-04-22 22:30:17

offerput的不同之处在于,put将等待一个已满的队列有空间,而如果队列已满(并且add将抛出异常),则offer (具有可选的超时)将简单地返回false (不添加项)。

只要您的代码尊重这些差异,那么无论您使用哪种方法都没有问题(当然,有时一种方法更适合特定的任务)。

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

https://stackoverflow.com/questions/36793754

复制
相关文章

相似问题

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