Write a Java program that correctly implements producer consumer problem using the concept of multithreading.

Java Design Patterns | Consumer and Producer

Pic credit: Freepic.com


// implementation of a producer and consumer.
class Q
{
            int n;
            boolean valueSet = false;
            synchronized int get()
             {
                        while(!valueSet)
                        try
                        {
                                    wait();
                        }
                         catch(InterruptedException e)
                        {
                                    System.out.println(“InterruptedException caught”); 
                        }
                        System.out.println(“Got: ” + n);
                        valueSet = false;
                        notify();
                        return n;
            }         
            synchronized void put(int n)
            {
                        while(valueSet)
                        try
                        {
                                    wait();
                        }
                         catch(InterruptedException e)          
                        {
                                    System.out.println(“InterruptedException caught”);
                        }
                        this.n = n;
                        valueSet = true;
                        System.out.println(“Put: ” + n);
                        notify();          
            }
}
class Producer implements Runnable
 {
            Q q;
            Producer(Q q)
            {
                        this.q = q;
                        new Thread(this, “Producer”).start();
            }
            public void run()
             {
                        int i = 0;
                        while(true)
                        {
                                    q.put(i++);
                        }
            }
}
class Consumer implements Runnable
{
            Q q;
            Consumer(Q q)
            {
                        this.q = q;
                        new Thread(this, “Consumer”).start();
            }
            public void run()
            {
                        while(true)
                        {
                                    q.get();
                        }
            }
}
class PCproblem
{
            public static void main(String args[])
            {
                        Q q = new Q();
                        new Producer(q);
                        new Consumer(q);
                        System.out.println(“Press Control-C to stop.”);
            }
}
Output:
Press Control-C to stop.
Put: 0
Got: 0
Put: 1
Got: 1
Put: 2
Got: 2
Put: 3
Got: 3
Put: 4

Got: 4

Leave a Reply

Your email address will not be published. Required fields are marked *

Enable Notifications OK No thanks