Académique Documents
Professionnel Documents
Culture Documents
PROGRAMACIN CONCURRENTE:
THREADS
2.1 INTRODUCCIN
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 quisiramos, por ejemplo, desarrollar una aplicacin Telefono, tendramos que
programar estas dos actividades:
Recoger sonidos con un micrfono y enviarlos en tiempo real a otro
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
simultnea, utilizando los conocimientos adquiridos hasta el momento solo tenemos
una opcin: abrir dos consolas en nuestro sistema y ejecutar cada aplicacin (la que
enva sonido y la que recibe sonido) en cada consola.
La solucin adoptada aprovecha la capacidad que tienen los sistemas
operativos para ejecutar varios procesos de manera simultnea (paralela,
concurrente); en este caso, el sistema operativo ejecuta en paralelo cada una de
nuestras mquinas virtuales Java (JVM), que se encuentran en las dos consolas
abiertas.
Si quisiramos darle un uso profesional a nuestra aplicacin, enseguida
descubriramos que no es factible vender una solucin que requiere ejecutar
distintas partes del programa por separado. Lo adecuado es que una misma
aplicacin Java pueda ejecutar varios procesos concurrentemente.
Los Threads (hilos) de Java permiten ejecutar en paralelo varios programas
que se encuentran en la misma aplicacin. En el ejemplo Telefono, haciendo uso de
threads, podemos ejecutar simultneamente el programa que captura y enva sonidos
con el programa que los recibe y los manda a los altavoces; de esta manera,
podemos ejecutar toda la funcionalidad desde una sola consola.
15
1
2
import java.util.Random;
public class ThreadBasico implements Runnable {
private String Frase;
private Random Aleatorio;
public ThreadBasico (String Frase) {
this.Frase = Frase;
Aleatorio = new Random();
} // Constructor
public void run() {
try {
do {
System.out.println (Frase);
Thread.sleep( (long) (Math.abs(Aleatorio.nextInt())
% 500));
} while (true);
} catch (InterruptedException e) {}
} // run
}
// class
17
LetrasHilos
CHilo
import java.util.Random;
public class CHilo implements Runnable {
private String Caracter;
public CHilo (String Caracter) {
this.Caracter = Caracter;
}
public void run() {
try {
Thread.sleep( (long)
(Math.abs(new Random().nextInt())%1000));
System.out.print(Caracter);
} catch (InterruptedException e) {}
}
}
19
.....
if (Semaforo.equals(Verde)) {
PermisoPaso();
4
5
6
Semaforo=Rojo
}
.......................
Mtodo
void start()
void run()
21
Accin
Provoca el comienzo de la ejecucin del hilo.
Se ejecuta automticamente tras start, cuando el hilo se ha
construido a partir del interfaz Runnable (o la clase
Thread).
Detiene la ejecucin del hilo durante, al menos, los
milisegundos indicados
Elimina el hilo sin liberara recursos
Establece una prioridad para el hilo (MAX_PRIORITY,
MIN_PRIORITY, NORM_PRIORITY)
Indica la prioridad del hilo
Espera a que este hilo termine
Devuelve un apuntador al hilo que se est ejecutando
Indica si el hilo ha sido arrancado y todava no ha
terminado
Establece el hilo como demonio o como usuario. Los hilos
demonio estn supeditados a los hilos que los han creado,
de tal manera que cuando el creador termina, sus hijos
demonio tambin finalizan
Indica si el hilo es de tipo demonio o usuario
Asigna un nombre al hilo
Devuelve el nombre del hilo