public class ProductorConsumidor_ant {
    
    public ProductorConsumidor_ant() {  
        Almacen almacen = new Almacen();
        Productor p = new Productor(almacen, 1);
        Consumidor c = new Consumidor(almacen, 1);
        p.start();
        c.start();
    }
    
    class Almacen {
        private int almacenados;
        private boolean disponible;
        
        public Almacen() {
            disponible = false;
            almacenados = 0;
        }
        
        public int get() {
            disponible = false;
            return almacenados;
        }
        
        public void put(int unValor) {
            almacenados = unValor;
            disponible = true;
        }      
    }
    
    class Productor extends Thread {
        private Almacen almacen;
        private int numero;

        public Productor(Almacen unDeposito, int unNumero) {
            almacen = unDeposito;
            this.numero = unNumero;
        }

        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                almacen.put(i);
                System.out.println("Productor #" + this.numero
                + " pone: " + i);
                try {
                sleep((int)(Math.random() * 100));
                } catch (InterruptedException e) { }
            }
        }
    }
    
     class Consumidor extends Thread {
       private Almacen almacen;
       private int numero;
       
       public Consumidor(Almacen unDeposito, int unNnumero) {
          almacen = unDeposito;
          this.numero = unNnumero;
       }
       
       @Override
       public void run() {
          int value = 0;
             for (int i = 0; i < 10; i++) {
                value = almacen.get();
                System.out.println("Consumidor #" 
                            + this.numero
                            + " toma: " + value);
             }
       }
    } 
     
    static public void main(String args[]) {
        new ProductorConsumidor_ant();
    }
}
