社区
Java SE
帖子详情
Java Concurrent 一个生产者,多个消费者,线程如何设计?
lzfzz
2012-05-25 11:51:15
java.util.concurrent
同步队列可满足一个生产者供给一个消费者的模式;
可以先关闭消费者线程后再启动另外一个消费者线程,但是消费到不同的生产者数据。
如果一个生产者供给多个消费者,所有消费者都消费同一个数据,该如何设计?
假如使用阻塞队列:BlockingQueue
...全文
282
4
打赏
收藏
Java Concurrent 一个生产者,多个消费者,线程如何设计?
java.util.concurrent 同步队列可满足一个生产者供给一个消费者的模式; 可以先关闭消费者线程后再启动另外一个消费者线程,但是消费到不同的生产者数据。 如果一个生产者供给多个消费者,所有消费者都消费同一个数据,该如何设计? 假如使用阻塞队列:BlockingQueue
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
安特矮油
2012-05-25
打赏
举报
回复
就把原有的消费者改成多个,没产生的时候从中选出一个消费者来处理就OK了吧
古布
2012-05-25
打赏
举报
回复
http://blog.csdn.net/winning007/article/details/5190979
龙四
2012-05-25
打赏
举报
回复
LinkedBlockingQueue的put和take方法直接就满足要求了啊,阻塞动作它都做好了
qybao
2012-05-25
打赏
举报
回复
那要知道有多少个消费者才能很好的控制,否则都不知道什么时候该删除生产出来的数据
做法很简单,就是用一个Map<YourData, List<Long>>来保存消费者信息,生产者把生产出来的数据放到blockingqueue里,消费者peek一下获取生产的数据,然后检索map看看生产数据是否已经存在,如果不存在,则添加map信息,如果存在,则取出map里的List<Long>,看看自己的线程id是否存在,如果存在,则等待,如果不存在则添加id信息,并做相关的处理,然后判断List<Long>的size是否等于消费者数,如果等于则删除map信息,同时take掉blockingqueue信息
用
Java
解决
生产者
-
消费者
问题
当我们尝试多
线程
编程时,
生产者
-
消费者
问题是最常见的问题之一。 尽管不像多
线程
编程中的其他一些问题那样具有挑战性,但是错误地实现此问题可能会造成应用程序混乱。 生产的物品将不使用,开始的物品将被跳过,消耗量取决于生产是在消耗尝试之前还是之后开始的,等等。此外,您可能会在异常发生后很长时间注意到异常,最重要的是,几乎所有异常
线程
程序,这一程序也很难调试和复制。 因此,在这篇文章中,我认为...
java
生产者
消费者
问题
生产者
-
消费者
模式是多
线程
并发协作的经典案例。
生产者
-
消费者
问题包含两类的
线程
, 其中
生产者
线程
用于生产数据,
消费者
线程
用于消费数据。为了解耦
生产者
和
消费者
之间的关系,通常采用共享内存的方式(共享数据区域)。
生产者
只需要把生产的数据放到共享数据区域,而不需要关心
消费者
的行为。
消费者
只需要到共享数据区域取数据,而不需要关心
生产者
的行为。共享数据区域应该要具备以下
线程
并发协作的功能。 如果共享数据区...
JUC并发编程-
线程
和进程、Synchronized 和 Lock、
生产者
和
消费者
问题
什么是JUC、
线程
和进程、Lock锁、
生产者
和
消费者
问题
Java
的con
current
用法详解
我们都知道,在JDK1.5之前,
Java
中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量
Java
多
线程
并发程序
设计
时,为防止死蹦等现象的出现,比如使用
java
之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免
线程
安全性方面带来的...
Java
并发陷阱:为何 notify() 在多
生产者
消费者
模型中如此危险?
在
Java
并发编程中,
生产者
-
消费者
模式是
一个
经典且实用的模型。我们通常使用阻塞队列(Blocking Queue)作为
生产者
和
消费者
之间的缓冲区。在尝试手动实现阻塞队列时,synchronized、wait()、notify() 和 notifyAll() 这几个关键字是绕不开的核心。然而,
一个
常见的误区,或者说陷阱,就潜藏在 notify() 的使用上,尤其是在涉及
多个
生产者
和
多个
消费者
的场景下。
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章