
/////////////////////////////////////////////////CLASS OBJET-PARTAGER /////////////////////////////////////
class ObjetPartager
{
public int x=0;

/////////////////////// METHOD GET ==> TO CONSUMER CLASS //////////////////////////////////////////////////
public  synchronized void  get(String s)
{
System.out.println(s+ ": Je veux  consommer ");
int a=x;
if(a==0)
try
{
System.out.println("OUUUUUUUUUUUUUUUUPS je v dormir avant");
wait();
}catch(Exception e){System.err.println(e);}
a=a-1;
x=a;
System.out.println(s+ " : Al 7amdoullah j'ai bien manger ;) "+x);
}

}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// CLASS PROCESSUS PRODUCTEUR //////////////////////////////////////////////////////

class Processus_C extends Thread
{
ObjetPartager TH;
public Processus_C(ObjetPartager TH)
{
this.TH=TH;
}

public void run()
{

//System.out.println( getName());
while(true)
TH.get(getName());
//System.out.println( getName());
}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////// CLASS PROCESSUS CONSOMMATEUR /////////////////////////////////


class Processus_P extends Thread
{
ObjetPartager TH;
public Processus_P(ObjetPartager TH)
{
this.TH=TH;
}

public  /*SYNCHRONIZED HERE DO NOT WORK */ void  add(String s)
{
System.out.println(s+ ": Je veux ajouter ");
int a=TH.x;
a=a+1;
try
{
Thread.sleep(1);
}
catch(Exception e){}
TH.x=a;
System.out.println(s+ " : j'ai augmenter la valeur de x ====>"+TH.x);
System.out.println(s+ " : je reveille mnt les consommateur ");
/* We must GET the TH OBJECT MONITOR */
synchronized(TH){
try
{TH.notifyAll();}catch(Exception r){}
}
}

public void run()
{

//System.out.println( getName());
while(true)
add(getName());
//System.out.println( getName());
}
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////// CLASS TEST //////////////////////////////////////////////////

public class Wait_NotifyPb
{
public static void main(String h[])
{
ObjetPartager o=new ObjetPartager();
Processus_C a;
Processus_P b;
a= new Processus_C(o);
b= new Processus_P(o);
a.start();
b.start();
}
}

