在一个简单的生产者-消费者场景中,我有两个线程围绕一个LinkedBlockingQueue进行管理。
在消费者线程中,我使用take(),即当一个元素进入队列时,我想阻塞消费者。
如果在生产者线程中,我使用offer()而不是put()来添加到队列中,可以吗?这会造成什么问题吗?
我的意思是,使用take()是否意味着我也应该使用put?
我想不是,但我想要完全确定。
发布于 2016-04-22 20:30:53
不,无论你在消费者端使用什么,在生产者上使用offer都是没有问题的。
这将是一种常见的机制,允许生产者推送到许多队列中的一个,它可以在每个队列上调用offer,直到它成功为止。它甚至可以在最后一个队列中调用put。
发布于 2016-04-22 22:30:17
offer和put的不同之处在于,put将等待一个已满的队列有空间,而如果队列已满(并且add将抛出异常),则offer (具有可选的超时)将简单地返回false (不添加项)。
只要您的代码尊重这些差异,那么无论您使用哪种方法都没有问题(当然,有时一种方法更适合特定的任务)。
https://stackoverflow.com/questions/36793754
复制相似问题