我了解到,在实现生产者消费者模式时,我们可以使用 BlockingQueue
代替经典的 wait()
和 notify()
。我的问题是,哪种实现效率更高?在一篇关于阻塞队列的文章中写道:“您不需要使用 wait
和 notify
在生产者和消费者之间进行通信”
了解更多:http://javarevisited.blogspot.com/2012/02/producer-consumer-design-pattern-with.html#ixzz2lczIZ3Mo “。这种简单性是否会以牺牲效率为代价?
最佳答案
BlockingQueue 会更快,因为它不使用等待/通知或同步来进行队列访问。所有并发包都使用原子类实现无锁算法。
考虑一个包含 100 个元素的队列和 1000 个想要完成其工作的线程。使用同步实现,对于每个元素,999 个线程需要等待,直到 1 个线程选择了它的任务。使用无锁算法,100 个线程同时选择他们的任务,只有其他 900 个线程需要等待。
关于java - 阻塞队列与生产者消费者模式的经典实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184688/