miércoles, 24 de septiembre de 2014

Un ejemplo de hilos no sincronizados (Consumidor y Productor)

He aqui lo último en trabajos sencillos pero efectivos. Un problema de productores y consumidores con hilos en java. 2 productores, 3 consumidores, todo el drama.

package ejemplo;
public class DatosCompartidos {
public String dato;
public String getDato(){
return dato;
}
public void newDato(String dato){
this.dato=dato;
}
}

El productor
package ejemplo;
public class Productor extends Thread{
public DatosCompartidos datos;
public String nombre;
Productor(DatosCompartidos dc, String nmbr){
datos=dc;
nombre=nmbr;
}
public void run(){
Integer i=0;
while(true){
i++;
datos.newDato(i.toString());
System.out.println(nombre+" produce "+i);
}
}
}
view raw Productor.java hosted with ❤ by GitHub

El consumidor
package ejemplo;
public class Consumidor extends Thread{
public DatosCompartidos datos;
public String nombre;
Consumidor(DatosCompartidos dc, String nmbr){
datos=dc;
nombre=nmbr;
}
public void run(){
while(true){
System.out.println(nombre+" consume "+datos.getDato());
}
}
}
view raw Consumidor.java hosted with ❤ by GitHub

Y finalmente, el main. Aquí llamo a 2 productores y 3 consumidores.
package ejemplo;
public class ProducerConsumerSinSincro {
public static void main(String[] args){
DatosCompartidos datos=new DatosCompartidos();
Productor p1=new Productor(datos, "p1");
Productor p2=new Productor(datos, "p2");
Consumidor c1=new Consumidor(datos, "c1");
Consumidor c2=new Consumidor(datos, "c2");
Consumidor c3=new Consumidor(datos, "c3");
p1.start();
p2.start();
c1.start();
c2.start();
c3.start();
}
}


Como pueden ver, los hilos no están sincronizados de ninguna manera. Así que es divertido ver como se pelean por los recursos (literalmente, los recursos).

No hay comentarios:

Publicar un comentario