import java.io.*;
class almacen extends MyObject{ // Region Critica
private int valor;
private ConditionVariable produce = null;
private ConditionVariable consume = null;
public almacen() {
valor = 0;
produce = new ConditionVariable();
consume = new ConditionVariable();
}
public synchronized void poner(int x){
while(valor != 0)
wait(produce);
valor = x;
notify(consume);
}
public synchronized int extraer(){
int auxiliar;
auxiliar = valor;
while(valor == 0) wait(consume);
valor = 0;
notify(produce);
return auxiliar;
}
} // fin_clase
class consumidor extends Thread{
private almacen a;
public consumidor(almacen am) { this.a = am; }
public void run(){
int ext;
for(int i=1;i<=5;i++)
{
ext = a.extraer();
System.out.println("El consumidor recupero: " + ext);
try { sleep( (int)Math.random()*3000 ); }
catch(InterruptedException e)
{ System.out.println("Error "+e.toString()); }
}
}
}
class productor extends Thread{
private almacen a;
public productor(almacen am) { this.a = am; }
public void run(){
int ext;
for(int i=1;i<=5;i++)
{
a.poner(i);
System.out.println("El productor puso: " + i);
try { sleep( (int)Math.random()*3000 ); }
catch(InterruptedException e)
{ System.out.println("Error "+e.toString()); }
}
}
}
public class Productor_Consumidor{
public static void main(String[] args){
almacen alm1 = new almacen();
consumidor c = new consumidor(alm1);
productor p = new productor(alm1);
p.start(); //lanzar el hilo productor
c.start(); //lanzar el hilo consumidor
}
}
|