Programacion Concurrente
  Productor-consumidor
 

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
  }
 } 

 
   
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis