单生产者 多消费者问题 本帖最后由 david8501 于 2010-07-10 22:06:51 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以前在一本介绍Java设计模式的书上看到过并发模式,有一章专门讲Java并发模式 现在做一个中介,中介从服务器接收一条消息,然后将这一条消息转发给其他多个客户端,其中接收服务器消息是一个线程,针对每一个客户端有一个线程,怎么做一个这样的单生产者,多消费者模式的东西?这个和文字聊天室程序(服务器-多客户端)类似一个客户端讲话,服务器接受转发其他所有客户端你的中介实际上是CS的Server你提的服务器只是中介服务的数据来源 我觉得生产者/消费者模式和楼主所描述的需求有点差异吧=。=那个中介只要有集合存储所有连上Server的客户端就可以实现分发了吧 以下是基于典型的生产者-使用者场景的一个用例。注意,BlockingQueue 可以安全地与多个生产者和多个使用者一起使用。 class Producer implements Runnable { private final BlockingQueue queue; Producer(BlockingQueue q) { queue = q; } public void run() { try { while(true) { queue.put(produce()); } } catch (InterruptedException ex) { ... handle ...} } Object produce() { ... } } class Consumer implements Runnable { private final BlockingQueue queue; Consumer(BlockingQueue q) { queue = q; } public void run() { try { while(true) { consume(queue.take()); } } catch (InterruptedException ex) { ... handle ...} } void consume(Object x) { ... } } class Setup { void main() { BlockingQueue q = new SomeQueueImplementation(); Producer p = new Producer(q); Consumer c1 = new Consumer(q); Consumer c2 = new Consumer(q); new Thread(p).start(); new Thread(c1).start(); new Thread(c2).start(); } } 求Java日期选择器 各位大虾们,散分了! 迪米特法则相关 单击鼠标实现文字的转化 哈夫曼树 关于char[]的问题,麻烦高手给看下,谢谢 java环境设置问题 java 信手问题,通过编译,但是看不到我创建的包 哪儿有JBuilder6的电子书籍下载 问个正则表达式的问题 为什么要设置环境变量,环境变量有什么用? java中可以创建文件,然后设定文件的长度吗
private final BlockingQueue queue;
Producer(BlockingQueue q) { queue = q; }
public void run() {
try {
while(true) { queue.put(produce()); }
} catch (InterruptedException ex) { ... handle ...}
}
Object produce() { ... }
} class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) { queue = q; }
public void run() {
try {
while(true) { consume(queue.take()); }
} catch (InterruptedException ex) { ... handle ...}
}
void consume(Object x) { ... }
} class Setup {
void main() {
BlockingQueue q = new SomeQueueImplementation();
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}