Java Concurrent 一个生产者,多个消费者,线程如何设计?

lzfzz 2012-05-25 11:51:15
java.util.concurrent
同步队列可满足一个生产者供给一个消费者的模式;
可以先关闭消费者线程后再启动另外一个消费者线程,但是消费到不同的生产者数据。

如果一个生产者供给多个消费者,所有消费者都消费同一个数据,该如何设计?
假如使用阻塞队列:BlockingQueue
...全文
278 4 打赏 收藏 转发到动态 举报
写回复
用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信息

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧