我在一个简单的生产者 - 消费者场景中管理一个LinkedBlockingQueue
2线程。LinkedBlockingQueue - 生产者/消费者
在消费者线程中,我使用take()
即我想在元素进入队列时阻止使用者。
如果在生产者线程中,我使用offer()
添加到队列中,而不是put()
?会导致任何问题吗?
我的意思是,使用take()
意味着我应该也使用put
?
我想不是,但我想完全确定。
我在一个简单的生产者 - 消费者场景中管理一个LinkedBlockingQueue
2线程。LinkedBlockingQueue - 生产者/消费者
在消费者线程中,我使用take()
即我想在元素进入队列时阻止使用者。
如果在生产者线程中,我使用offer()
添加到队列中,而不是put()
?会导致任何问题吗?
我的意思是,使用take()
意味着我应该也使用put
?
我想不是,但我想完全确定。
不,使用offer
对生产者没有任何问题,无论您在消费者端使用什么。
这将是一个常见的机制,允许生产者推送到其中一个队列,它可以在每个队列上调用offer
,直到成功。它甚至可以在最后一个队列上调用put
。
offer
和put
唯一的区别,put
将等待队列已满,有空间,同时offer
(可选超时)将简单地返回false(不添加项)如果队列已满(和add
会抛出一个例外)。
只要您的代码尊重这些差异,那么您使用哪种方法都没有问题(尽管当然,有时候某个方法对某个任务更好)。