next up previous contents
Next: Threads: Deadlock Up: Java Notes Previous: Threads Example 6.1: Lost

Threads Example 6.2: Synchronized

/**
 * Adapted from The Java Tutorial
 * Second Edition by Campione, M. and
 * Walrath, K.Addison-Wesley 1998
 */
class CubbyHole{
  private int contents;
  private boolean available = false;
  
  public synchronized int get(){//synchronized method
	while (available == false){//wait until produced
	  try{
		wait();
	  } catch (InterruptedException e){ }
	}
	
	available = false;
	
	notifyAll();// allow put (produce)
	
	return contents;//get done
  }
  
  public synchronized void put(int value){//synchronized method

	while (available == true){//wait until consumed
	  try{
		wait();
	  } catch (InterruptedException e){ }
	}
	
	contents = value;//put done
	available = true;

	notifyAll();// allow get (consume)

  }
}

class Consumer extends Thread{
  private CubbyHole cubbyhole;
  private int number;
  
  public Consumer(CubbyHole c, int number){
	cubbyhole = c;
	this.number = number;
  }
  
  public void run(){
	int value = 0;
	for (int i = 0; i < 10; i++){
	  value = cubbyhole.get();
	  System.out.println("Consumer #" + this.number + " got: " + value);

	  try{// delay a bit after get (consume) to allow next put (produce)
		sleep((int)(Math.random() * 100));
	  } catch (InterruptedException e){ }

	}
  }
}

class Producer extends Thread{
  private CubbyHole cubbyhole;
  private int number;
  
  public Producer(CubbyHole c, int number){
	cubbyhole = c;
	this.number = number;
  }
  
  public void run(){
	for (int i = 0; i < 10; i++){
	  cubbyhole.put(i);
	  System.out.println("Producer #" + this.number + " put: " + i);
	  try{//delay a bit after put (produce) to allow next get (consume)
		sleep((int)(Math.random() * 100));
	  } catch (InterruptedException e){ }

	}
  }
}
public class ProducerConsumerTest{
  public static void main(String[] args){
	CubbyHole c = new CubbyHole();
	Producer p1 = new Producer(c, 1);
	Consumer c1 = new Consumer(c, 1);
	
	p1.start();
	c1.start();
  }
}



Ananda Amatya
9/15/1999