When I run below code, Producer run() method starts and puts random numbers to jobs queue but Consumer run() method never runs. What is the main problem here?
Here is Main class;
public static LinkedBlockingQueue<Integer> jobs = new LinkedBlockingQueue<>();
public static void main(){
MessageProducer producer = new MessageProducer(jobs);
Thread producerThread = new Thread(producer);
producerThread.run();
MessageConsumer consumer = new MessageConsumer(jobs);
Executor executor = Executors.newFixedThreadPool(3);
executor.execute(consumer);
}
Producer;
public class MessageProducer implements Runnable {
public LinkedBlockingQueue<Integer> jobs;
public MessageProducer(LinkedBlockingQueue<Integer> jobs){
this.jobs = jobs;
}
@Override
public void run() {
while(true) {
try {
jobs.put((int) (Math.random() * 10));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Consumer;
public class MessageConsumer implements Runnable{
public LinkedBlockingQueue<Integer> jobs;
public MessageConsumer(LinkedBlockingQueue<Integer> jobs) {
this.jobs = jobs;
}
@Override
public void run() {
while(true) {
System.out.println("Executing " + jobs.poll());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}