Programacion
Octubre 17, 2017, 05:21:19 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: SMF - Just Installed!
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Multihilos  (Leído 2229 veces)
rromero
Administrator
Newbie
*****
Mensajes: 16


Ver Perfil Email
« : Julio 17, 2010, 02:40:47 »

COMO SINCRONIZA PROCESSOS DIFERENTES
en el agoritmo de productor y consumidor

public class SharedCell {
    public static void main(String args[])
    {
        HoldInteger h = new HoldInteger();
        ProduceInteger p = new ProduceInteger(h);
        ConsumeInteger c = new ConsumeInteger(h);

        p.start();
        c.start();
    }
}


class ProduceInteger extends Thread {
    private HoldInteger pHold;

    public ProduceInteger(HoldInteger h){
        pHold = h;
    }

    public void run(){
        for (int count = 0; count < 10; count++){
            pHold.setSharedInt(count);
            System.out.println("El productor puso "+ count+"En SharedInt");

            //dormir en un intervalo de tiempo
            try{
                sleep( (int) (Math.random()*3000));
            }
            catch(InterruptedException e){
                System.err.println("Excepcio"+e.toString());
            }
        }
    }
}

class ConsumeInteger extends Thread {
    private HoldInteger cHold;

    public ConsumeInteger(HoldInteger h){
        cHold = h;
    }

    public void run(){
        int val;

        val = cHold.getSharedInt();
        System.out.println("El consumidor recupero"+ val);

        while (val != 9){
            //dormir un intervalo aleatorio
            try{
                sleep( (int) (Math.random()*3000));
            }
            catch(InterruptedException e){
                System.err.println("Excepcio"+e.toString());
            }

            val = cHold.getSharedInt();
            System.out.println("El consumidor recupero"+ val);
        }
    }
}

class HoldInteger{
    private int sharedInt;
    //Cambio
    private boolean writeable = true;


    public synchronized void setSharedInt(int val) {
   while (!writeable){
       try {
      wait();
       }
       catch( InterruptedException e){
         System.err.println("Excepcion:" + e.toString() );
      }
   }
   
   sharedInt = val;
   writeable = false;
   notify();
      
    }// fin setSharedint

    public synchroized int getSharedInt() {

   while (writeable){
       try {
      wait();
       }
       catch( InterruptedException e){
         System.err.println("Excepcion:" + e.toString() );
      }
   }
   
   writeable = true;
   notify();
   return sharedInt;
    }

}//fin class HoldInteger
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC XHTML 1.0 válido! CSS válido!