【发布时间】:2011-08-04 04:17:33
【问题描述】:
我有一组线程,其中每个线程都必须等待其所需的输入,进行一些计算,最后将其输出值发送到特定线程。
我计划有一个包含线程名称和线程本身的全局映射,以便让每个线程按名称获取其“后继”线程,然后将值发送给它们。
首先,我查看了使用阻塞队列的 Producer-Consumer 示例:
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) {
queue = q;
}
public void run() {
try {
while(true) {
System.out.println("Waiting for input");
consume(queue.take());
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
void consume(Object x) {
System.out.println("Received: " + x);
}
}
class Setup {
public static void main(String...args) {
BlockingQueue q = new ArrayBlockingQueue<String>(10);
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();
}
}
我认为我可以为每个线程设置一个阻塞队列。然后,消费者线程将在 queue.take() 上循环,直到它接收到所有所需的值。
后来,我发现了这个post,其中提出了与我类似的问题。提出的解决方案似乎比阻塞队列解决方案更容易:它基于只在我想要的线程上调用一个方法,然后将消息发送到。
我想就这两种方法中的哪一种最好,或者是否有更好的方法来实现我想要的,我想请您提供一些建议(因为我认为这是一种常见情况)。
非常感谢您的帮助。
【问题讨论】:
标签: java multithreading