Producer Consumer Problem.

The famous problem in multi threading is Producer Consumer Problem.

Producer Consumer Program in Java

import java.util.LinkedList;
class Producer extends Thread {
      LinkedList<Integer> list = null;
      int limit = 0;
      int elem = 0;
     
      public Producer(LinkedList<Integer> list, int limit) {
            this.list = list;
            this.limit = limit;
      }
      public void run() {
            try {
                  while(true) {
                        synchronized (list) {
                              while(list.size()==limit) {
                                    System.out.println("Producer Waiting ....");
                                    list.wait();                                   
                              }                                  
                             
                              list.add(++elem);
                              System.out.println("Produced elememnt : "+elem);
                                   
                              list.notify();
                        }

                        Thread.sleep(1000);                      
                  }                
            }catch(InterruptedException e) {
                  System.out.println("Producer run method exception : "+ e);
            }
      }
}

class Consumer extends Thread {
      LinkedList<Integer> list = null;
      int limit = 0;
     
      public Consumer(LinkedList<Integer> list, int limit) {
            this.list = list;
            this.limit = limit;
      }
     
      public void run() {
            try {
                  while(true) {
                        synchronized (list) {
                              while(list.size() == 0) {
                                    System.out.println("Consumer Waiting ....");
                                    list.wait();
                              }                                  
                             
                              Integer removeFirst = list.removeFirst();
                              System.out.println("Consumed element : "+removeFirst);
                                   
                              list.notify();               
                        }
                        Thread.sleep(1000);
                  }                
            }catch(InterruptedException e) {
                  System.out.println("Consumer Exception : "+e);
            }
      }
}

public class ProducerConsumerProblem {
      public static void main(String[] args) {
            LinkedList<Integer> list = new LinkedList<>();
            int limit = 5;
           
            Producer producer = new Producer(list, limit);
            Consumer consumer = new Consumer(list, limit);
           
            producer.start();
            consumer.start();
      }

}


Output:

Produced elememnt : 1
Consumed element : 1
Consumer Waiting ....
Produced elememnt : 2
Consumed element : 2
Consumer Waiting ....
Produced elememnt : 3
Consumed element : 3
Produced elememnt : 4
Consumed element : 4
Produced elememnt : 5
Consumed element : 5
Produced elememnt : 6
Consumed element : 6
Consumer Waiting ....
Produced elememnt : 7
Consumed element : 7
Consumer Waiting ....
Produced elememnt : 8
Consumed element : 8
Consumer Waiting ....
Produced elememnt : 9
Consumed element : 9
Consumer Waiting ....
Produced elememnt : 10
Consumed element : 10

No comments:

Post a Comment