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

/////////////////////// METHOD ADD ==> TO CONSUMER CLASS //////////////////////////////////////////////////
public void  get(String s, Thread p)
{
System.out.println(s+ ": Je veux  consommer ");
int a=x;
if(a==0)
try
{
System.out.println("OUUUUUUUUUUUUUUUUPS je v dormir avant jusqu'a ce que le producteur termine son travail ");
p.join();
}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;
Processus_P p;
public Processus_C(ObjetPartager TH, Processus_P p)
{
this.TH=TH;
this.p=p;
}

public void run()
{

TH.get(getName(),p);

}
}

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


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

public void  add(String s)
{
System.out.println(s+ ": Je veux ajouter ");
int a=TH.x;
a=a+1;
try
{
Thread.sleep(10000);
}
catch(Exception e){}
TH.x=a;
System.out.println(s+ " : j'ai augmenter la valeur de x ====>"+TH.x);
System.out.println(s+ " : je termine mnt  ");
}

public void run()
{

add(getName());

}
}


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

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

b= new Processus_P(o);
a= new Processus_C(o,b);
a.start();
b.start();
}
}

