This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ejemplo; | |
public class DatosCompartidos { | |
public String dato; | |
public String getDato(){ | |
return dato; | |
} | |
public void newDato(String dato){ | |
this.dato=dato; | |
} | |
} |
El productor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} |
El consumidor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
} | |
} | |
} |
Y finalmente, el main. Aquí llamo a 2 productores y 3 consumidores.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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).