hilos
PROGRAMACIÓN CONCURRENTE:
THREADS
2.1 INTRODUCCIÓN
Todos los programas Java que hemos visto hasta ahora se ejecutan de
manera independiente a otros programas Java que podamos tener en nuestro sistema.
Si quisiéramos, por ejemplo, desarrollar una aplicación Telefono, tendríamos que
programar estas dos actividades:
• Recoger sonidos con un micrófono y enviarlos en tiempo real aotro
ordenador.
• Recibir los sonidos que nos llegan desde otro ordenador y reproducirlos por
los altavoces.
Si queremos poder hablar y escuchar lo que nos dicen, de manera
simultánea, utilizando los conocimientos adquiridos hasta el momento solo tenemos
una opción: abrir dos consolas en nuestro sistema y ejecutar cada aplicación (la que
envía sonido y la que recibe sonido) en cadaconsola.
La solución adoptada aprovecha la capacidad que tienen los sistemas
operativos para ejecutar varios procesos de manera simultánea (paralela,
concurrente); en este caso, el sistema operativo ejecuta en paralelo cada una de
nuestras máquinas virtuales Java (JVM), que se encuentran en las dos consolas
abiertas.
Si quisiéramos darle un uso profesional a nuestra aplicación, enseguidadescubriríamos que no es factible “vender” una solución que requiere ejecutar
distintas partes del programa por separado. Lo adecuado es que una misma
aplicación Java pueda ejecutar varios procesos concurrentemente.
Los Threads (hilos) de Java permiten ejecutar en paralelo varios programas
que se encuentran en la misma aplicación. En el ejemplo Telefono, haciendo uso de
threads, podemos ejecutarsimultáneamente el programa que captura y envía sonidos
14 © JESÚS BOBADILLA SANCHO
con el programa que los recibe y los manda a los altavoces; de esta manera,
podemos ejecutar toda la funcionalidad desde una sola consola.
2.2 DEFINICIÓN DE PROGRAMAS CONCURRENTES
Existen dos formas de definir una clase para que pueda ejecutarse en
paralelo a otras clases:
• Extendiendo la clase Thread
•Implementando el interfaz Runnable
Ejemplos:
public class SeEjecutaConcurrentemente extends Thread
public class SeEjecutaConcurrentemente implements Runnable
Puesto que Java no soporta herencia múltiple, si necesitamos heredar los
miembros de una clase resulta necesario hacer uso del interfaz Runnable; por
ejemplo, si deseamos crear un applet que se ejecute concurrentemente con otrosprogramas, podemos definir nuestra clase como:
public class AppletConcurrente extends java.applet.Applet implements Runnable
El interfaz Runnable es extremadamente sencillo: únicamente contiene el
método run(). Cuando un objeto que imple menta este interfaz se usa para crear un
thread, al arrancar el thread se ejecuta automáticamente el método run.
La clase Thread implementa el interfaz Runnable ycontiene un variado
grupo de constructores y métodos que permiten definir el comportamiento y
evolución de los programas concurrentes.
Las estructuras más simples de programas que usan threads son:
Empleando la clase Tread:
1
2
3
4
5
6
class TelefonoEnvia extends Thread {
.... // propiedades, constructores y métodos de la clase
public void run() {
……… // recoge sonidos del microfonoy los envía por la
//red
}
}
© JESÚS BOBADILLA SANCHO
15
Para crear y arrancar un thread con el comportamiento de TelefonoEnvia :
1
2
TelefonoEnvia InstanciaEnvia = new TelefonoEnvia();
InstanciaEnvia.start();
Empleando el interfaz Runnable :
1
2
3
4
5
6
7
class TelefonoEnvia implements Runnable {
.... // propiedades, constructores y métodos de la
.... // clasepublic void run() {
// recoge sonidos del microfono y los envía por la red
}
}
1
2
TelefonoEnvia InstanciaEnvia = new TelefonoEnvia();
new Thread(InstanciaEnvia).start();
Para crear y arrancar un thread con el comportamiento de TelefonoEnvia :
Como se puede apreciar en las estructuras de programa mostradas, para
arrancar un thread debemos utilizar el método start, que a su vez...
Regístrate para leer el documento completo.