0

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();
            }
        }
    }
}
hellzone
  • 5,393
  • 25
  • 82
  • 148

1 Answers1

3

Don't invoke Thread.run(). It doesn't start the thread. It invokes the run() method that in your case is an infinite loop.
So the JVM stays stucked on producerThread.run(); that never returns.

Instead invoke Thread.start() that will be in charge to invoke the run() method.

The Thread.start() javadoc states indeed :

Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.

davidxxx
  • 125,838
  • 23
  • 214
  • 215