You are here: Home / Topics / Program to use wait( ) and notify( ) and extending from Thread class

Program to use wait( ) and notify( ) and extending from Thread class

Filed under: Java on 2023-10-16 06:50:22

//  Program to use wait( ) and notify( ) and extending from Thread class.

Resource
{
int n = -1;
boolean flag = true;

synchronized void produce( int a )
{
 while( !flag )
 {
  try
  {
   wait();
  }
  catch( InterruptedException e )  {   }
 }
 n = a;
 System.out.println( " Producer ::: " + n ); 
 flag = false;
 notify();
}

synchronized int consume()
{
 while( flag )
 {
  try
  {
   wait();
  }
  catch( InterruptedException e )  {   }
 }
 flag = true;
 notify();
 System.out.println( " Consumer ::: " + n );
 return n;
}
}

class Producer extends Thread
{
Resource s;

Producer( Resource r )
{
 super( "Producer" );
 s = r;  
}

public void run()
{
 for( int i=1 ; i<=5 ; i++ )
 {
  try
  {
   Thread.sleep( 1000 );
  }
  catch( InterruptedException e )  {   }
  s.produce( i );
 }
 System.out.println( " Producer Terminating. " );
}
}

class Consumer extends Thread
{
Resource s;

Consumer( Resource r )
{
 super( "Consumer" );
 s = r;  
}

public void run()
{
 int i;
 do
 {
  try
  {
   Thread.sleep( 1000 );
  }
  catch( InterruptedException e )
  { }
  i = s.consume();
 } while( i != 5 );
 System.out.println("Consumer Terminating. " );
}
}

class WaitNotifyDemo1
{
public static void main(String args[ ])
{
 Resource r = new Resource();
 Producer p = new Producer( r );
 Consumer c = new Consumer( r );
 p.start();
 c.start();
}
}


Output:

Producer ::: 1
Consumer ::: 1
Producer ::: 2
Consumer ::: 2
Producer ::: 3
Consumer ::: 3
Producer ::: 4
Consumer ::: 4
Producer ::: 5
Consumer ::: 5
Producer Terminating.
Consumer Terminating

About Author:
K
Kirti     View Profile
I am from NCR region. Follow one course until sucess.