//file: BadConsumer.java import java.util.Vector; class BadProducer extends Thread { static final int MAXQUEUE = 5; private Vector messages = new Vector( ); public void run( ) { try { while ( true ) { putMessage( ); sleep( 1000 ); } } catch( InterruptedException e ) { } } private void putMessage( ) throws InterruptedException { while ( messages.size( ) == MAXQUEUE ) { System.out.println("Producer waiting"); //wait() for(int i=0; i<500000; i++); } messages.addElement( new java.util.Date().toString( ) ); // notify( ); } // called by BadConsumer public String getMessage( ) throws InterruptedException { //notify while ( messages.size( ) == 0 ) for(int i=0; i<500000; i++); //wait String message = (String)messages.firstElement( ); messages.removeElement( message ); return message; } } // end of class Producer public class BadConsumer extends Thread { BadProducer producer; BadConsumer(BadProducer p) { producer = p; } public void run( ) { try { while ( true ) { String message = producer.getMessage( ); System.out.println("Got message: " + message); sleep( 2000 ); } } catch( InterruptedException e ) { } } public static void main(String args[]) { BadProducer producer = new BadProducer( ); producer.start( ); new BadConsumer( producer ).start( ); } }