Mega Code Archive

 
Categories / Java / Threads
 

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();   }    }