2016-04-22 175 views
0

我在一个简单的生产者 - 消费者场景中管理一个LinkedBlockingQueue 2线程。LinkedBlockingQueue - 生产者/消费者

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

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

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

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

回答

1

不,使用offer对生产者没有任何问题,无论您在消费者端使用什么。

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

0

offerput唯一的区别,put将等待队列已满,有空间,同时offer(可选超时)将简单地返回false(不添加项)如果队列已满(和add会抛出一个例外)。

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