java - 阻塞队列与生产者消费者模式的经典实现

标签 java multithreading design-patterns

我了解到,在实现生产者消费者模式时,我们可以使用 BlockingQueue 代替经典的 wait()notify()。我的问题是,哪种实现效率更高?在一篇关于阻塞队列的文章中写道:“您不需要使用 waitnotify 在生产者和消费者之间进行通信”

了解更多: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/

相关文章:

c# - 单例代码摘录,一道面试题

java - 如何在 eWay Web 服务上创建 eWayHeader

java - 忽略方法参数

php - 大型应用ActiveRecord的设计问题

multithreading - 从另一个线程修改局部变量是什么意思?

c++ - Boost::thread 的瞬时中断

python - 如何与 Telegram bot python同时工作

java - Camel 使用 Simple DSL 将所有 CRLF 替换为 LF

java - 如何在不重新加载屏幕的情况下更改回收器 View 中的单个项目?

Java:陷入循环