Comunicación entre hilos
Cómo comunicar hilos
Comunicación entre hilos (punto 6.3.4)
Estructura típica:
synchronized method(...) {
while (!condicion()) {
wait();
}
// Tareas a realizar
notify();
//notifyAll();
}
Ejemplo: Sender and Receiver
Ejemplo: Crear 2 hilos, cada uno de ellos mostrará una letra
class ObjetoCompartido {
public void PintaCadena (String s) {
System.out.print(s);
}
}// ObjetoCompartido
class HiloCadena extends Thread {
private ObjetoCompartido objeto;
String cad;
public HiloCadena (ObjetoCompartido c, String s) {
this.objeto = c;
this.cad=s;
}
public void run() {
for (int j = 0; j < 10; j++) {
objeto.PintaCadena(cad);
}//for
}//run
}//HiloCadena
public class BloqueoHilos {
public static void main(String[] args) {
ObjetoCompartido com = new ObjetoCompartido();
HiloCadena a = new HiloCadena (com, " A ");
HiloCadena b = new HiloCadena (com, " B ");
a.start();
b.start();
}
}//BloqueoHilos
Mostrar de forma alternativa la letra de cada hilo: «A B A B . . . »
class ObjetoCompartido {
public void PintaCadena (String s) {
System.out.print(s);
}
}// ObjetoCompartido
class HiloCadena extends Thread {
private ObjetoCompartido objeto;
String cad;
public HiloCadena (ObjetoCompartido c, String s) {
this.objeto = c;
this.cad=s;
}
public void run() {
synchronized (objeto) {
for (int j = 0; j < 10; j++) {
objeto.PintaCadena(cad);
objeto.notify(); //aviso que ya he usado el objeto
try {
objeto.wait();//esperar a que llegue un notify
} catch (InterruptedException e) {
e.printStackTrace();
}
}//for
objeto.notifyAll(); //despertar a todos los wait sobre el objeto
}//fin bloque synchronized
System.out.print("\n"+cad + " finalizado");
}//run
}//HiloCadena
public class BloqueoHilos {
public static void main(String[] args) {
ObjetoCompartido com = new ObjetoCompartido();
HiloCadena a = new HiloCadena (com, " A ");
HiloCadena b = new HiloCadena (com, " B ");
a.start();
b.start();
}
}//BloqueoHilos


Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.