我了解到,在实现生产者消费者模式时,我们可以使用BlockingQueue
而不是经典的wait()
和notify()
。我的问题是,哪个实施更有效?在一篇关于阻塞队列的文章中,有人写道--“您不需要使用wait
和notify
在生产者和消费者之间进行通信”
阅读更多:http://javarevisited.blogspot.com/2012/02/producer-consumer-design-pattern-with.html#ixzz2lczIZ3Mo“。这种简单性是以牺牲效率为代价的吗?
发布于 2013-11-26 14:20:30
如果每秒产生/消耗的对象数量少于100000,那么您将无法看到标准实现或自己实现的差异。
否则,您可以使用以下选项来加速代码:
如果您必须每秒发送数千万条消息,请查看Lmax消毒器。
发布于 2013-11-26 13:26:51
BlockingQueue将更快,因为它为队列访问使用而不是,使用等待/通知或同步。所有并发包都使用原子类实现无锁算法。
考虑一个由100个元素组成的队列,1000个线程想要完成他们的工作。通过同步实现,每个元素999线程都需要等待,直到1个线程选择了它的任务。使用无锁算法,100个线程simultaneously会选择它们的任务,而只有其他900个线程需要等待。
发布于 2013-11-25 04:23:58
BlockingQueue只是一个类,它将wait()和notify()放到这种常见的用法中。一般来说,自己动手只是在重新发明轮子,只有当你有很多生产者和消费者,并且你可以以某种特定于你的代码的方式进行优化的时候,你才值得这样做。
https://stackoverflow.com/questions/20184688
复制相似问题