Thread Ejemplo
0tweetsretweet
La entrada anterior de programación multihilo (o concurrente), contenía un ejemplo en el que seprogramaban hilos (o threads) que se ejecutaban independientemente. Sin embargo, existen muchas situaciones interesantes donde ejecutar threads concurrentes que compartan datos y deban considerar el estado yactividad de otros threads. Este conjunto de situaciones de programación son conocidos como escenarios ‘productor/consumidor’; donde el productor genera un canal de datos que es consumido por elconsumidor.
Algunos lenguajes de programación, como Java, proporcionan una característica al trabajar con threads: la sincronización; esto permite, valga la redundancia, sincronizar los procesos para quetrabajen de manera correcta.
En esta primera entrada veremos un ejemplo de Productor-Consumidor, en el que NO se utiliza la sincronización, con el fin de entender mejor los problemas que se presentancuando los subprocesos “no se ponen de acuerdo”.
Ejemplo del algoritmo Productor-Consumidor SIN sincronización
En nuestro ejemplo, Productor y Consumidor comparten un Bufer; Productor escribe undato en el Bufer, mientras que Consumidor lee un dato del Bufer.
Lo primero a implementar en este ejemplo es la interfaz Bufer.java, que contienen dos métodos: establecer(int), que es usada por elProductor para asignar un valor a Bufer; y obtener(), usada por el Consumidor para obtener el valor de Bufer:
?
1
2
3
4
5 // La interfaz Bufer especifica los métodos llamados por el Productor y elConsumidor.
public interface Bufer {
public void establecer( int valor ); // colocar valor en Bufer
public int obtener(); // devolver valor de Bufer
}
En nuestro ejemplo tenemosa la clase BuferNoSincronizado.java que implementa la interfaz Bufer.java, y que será la clase que compartirán el Productor y el Consumidor.
?
01
02
03
04
05
06
07
08
09
10
11
12
13...
Regístrate para leer el documento completo.