【发布时间】:2015-11-27 10:30:05
【问题描述】:
这是生产者/消费者的经典问题。当我引导我的 Spring Boot 应用程序时,我启动了两个线程。我只想在收到 httpRequest 时从 Producer 线程写入共享队列。那么,如何将此值传递给我的生产者线程,以便我可以将其放入共享队列中?有可能吗?
主类
public class ProducerConsumerPattern {
public static void main(String args[]) {
// create shared object
BlockingQueue sharedQueue = new LinkedBlockingQueue();
// create Producer and Consumer Thread
Thread prodThread = new Thread(new Producer(sharedQueue));
Thread consThread = new Thread(new Consumer(sharedQueue));
// start producer and Consumer thread
prodThread.start();
consThread.start();
}
}
消费类
class Consumer implements Runnable {
private final BlockingQueue sharedQueue;
public Consumer (BlockingQueue sharedQueue) {
this.sharedQueue = sharedQueue;
}
@Override
public void run() {
while(true) {
try {
System.out.println("Consumed: "+ sharedQueue.take());
} catch (InterruptedException ex) {
Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
生产者类
class Producer implements Runnable {
private final BlockingQueue sharedQueue;
public Producer(BlockingQueue sharedQueue) {
this.sharedQueue = sharedQueue;
}
@Override
public void run() {
// I don't want to write in the queue the counter values.
// I want to put my own values, when I receive them from outside **
for (int i=0; i<10; i++) {
try {
System.out.println("Produced: " + i);
sharedQueue.put(i);
} catch (InterruptedException ex) {
Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
我可以通过@RestController和@RequestMapping获取http参数,但是如何获取Producer线程并将这个新值放入队列?
提前致谢!
【问题讨论】:
标签: java multithreading spring producer-consumer