LinkedBlockingQueue - 生产者/消费者

时间:2016-04-22 12:22:19

标签: java multithreading concurrency java.util.concurrent

我在一个围绕LinkedBlockingQueue管理的简单生产者 - 消费者场景中有2个主题。

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

如果在生产者线程中我使用offer()添加到队列而不是put(),是否可以?这会导致任何问题吗?

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

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

2 个答案:

答案 0 :(得分:1)

不,无论您在消费者端使用什么,都可以在生产者身上使用offer

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

答案 1 :(得分:0)

offerput的区别仅在于,put会等待一个完整的队列占用空间,而offer(带有可选的超时)只会返回false(如果队列已满(并且add将抛出异常),则不添加项目。

只要您的代码尊重这些差异,那么无论您使用哪种方法都没有问题(当然,有时候某个方法对某项任务更好)。

相关问题