This is the classic problem of Producer/Consumer. I start both threads when I bootstrap my Spring Boot application. I just want to write from Producer thread into the shared queue when I receive a httpRequest. So, how can I pass this value to my Producer thread in order that I can put it in the shared queue?. Is it possible?
Main Class
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();
}
}
Consumer Class
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);
}
}
}
}
Producer Class
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);
}
}
}
}
I can get the http param through @RestController and @RequestMapping, but how can I get Producer thread and put this new value into the queue?
Thanks in advance!