Producer and Comsumer : Producer Consumer « Threads « Java






Producer and Comsumer

Producer and Comsumer
public class ProducerComsumer extends Object {
  private Object slot;

  public ProducerComsumer() {
    slot = null; // null indicates empty
  }

  public synchronized void putIn(Object obj) 
            throws InterruptedException {

    while ( slot != null ) {
      wait(); 
    }

    slot = obj;  // put object into slot
    notifyAll(); // signal that slot has been filled
  }

  public synchronized Object takeOut() 
            throws InterruptedException {

    while ( slot == null ) {
      wait(); // wait while slot is empty
    }

    Object obj = slot;
    slot = null; // mark slot as empty
    notifyAll(); // signal that slot is empty
    return obj;
  }
  public static void main(String[] args) {
    final ProducerComsumer ch = new ProducerComsumer();

    Runnable runA = new Runnable() {
        public void run() {
          try {
            String str;
            Thread.sleep(500);

            str = "multithreaded";
            ch.putIn(str);
            str = "programming";
            ch.putIn(str);

            str = "with Java";
            ch.putIn(str);
          } catch ( InterruptedException x ) {
            x.printStackTrace();
          }
        }
      };

    Runnable runB = new Runnable() {
        public void run() {
          try {
            Object obj;

            obj = ch.takeOut();
            System.out.println("in run() - just took out: '" + 
                obj + "'");

            Thread.sleep(500);

            obj = ch.takeOut();
            System.out.println("in run() - just took out: '" + 
                obj + "'");

            obj = ch.takeOut();
            System.out.println("in run() - just took out: '" + 
                obj + "'");
          } catch ( InterruptedException x ) {
            x.printStackTrace();
          }
        }
      };

    Thread threadA = new Thread(runA, "threadA");
    threadA.start();

    Thread threadB = new Thread(runB, "threadB");
    threadB.start();
  }
  
}


           
       








Related examples in the same category

1.Producer Consumer TestProducer Consumer Test
2.The producer-consumer approach to thread cooperationThe producer-consumer approach to thread cooperation
3.Producer consumer in Java 1Producer consumer in Java 1
4.Producer consumer in Java 2Producer consumer in Java 2
5.Producer consumer for J2SE 1.5 using concurrentProducer consumer for J2SE 1.5 using concurrent
6.Fibonacci: producer and consumerFibonacci: producer and consumer