LOS THREADS O PROGRAMACIÓN MULTIHILO
Enviado por GFMC • 23 de Noviembre de 2013 • Tesis • 940 Palabras (4 Páginas) • 309 Visitas
II.11. LOS THREADS O PROGRAMACIÓN MULTIHILO
A. Introducción
Durante la ejecución de los programas existen muchas operaciones que precisan de una espera; en busca de una interacción con el exterior, dejando pasar el tiempo, esperando a que otro proceso acabe...
Java permite que estos tiempos desaprovechados sean utilizados por el programador para realizar determinadas tareas, y así aprovechar el microprocesador durante toda la ejecución del programa. Para ello implementa el concepto de threads, o hilos de control del programa.
Mediante el uso de varios threads, se consigue ejecutar varios procesos en paralelo, de forma que cuando uno de ellos esté esperando algún evento, permita que el microprocesador ejecute alguno de los otros threads en espera. Cuando el evento que el primer thread esperaba sucede, de nuevo se intercambian los threads para que el primer thread continúe su ejecución.
Todo esto viene a suplir a la técnica de exclusión mutua denominada utilización de semáforos, extendida entre los programadores de C en UNIX.
B. Utilización de thread
Para crear un thread, se ha de implementar una clase, extendiendo la clase base Runnable, y crear un objeto de la clase Thread. Este objeto representará un nuevo hilo de control, que será accionado cuando invoquemos al método start() del thread. En ese momento este hilo se activará, ejecutando (si el planificador de hilos considera que es el momento), el método run() de la clase en que todo esto suceda.
Por ejemplo, el siguiente programa utiliza dos hilos, el hilo general main, y el hilo thDemo que creamos:
import java.io.*;
import java.net.*;
class ThreadDemo implements Runnable {
ThreadDemo() {
Thread thDemo = new Thread( this, "ThDemo" );
thDemo.start();
}
public void run() {
try {
Thread.sleep(3000);
} catch( InterruptedException e ) { }
System.out.println("Saliendo del hilo hijo");
}
public static void main( String args[] ){
new ThreadDemo();
try {
for ( int i = 5 ; i >0 ; i-- ) {
System.out.println(" Seg: " + i );
Thread.sleep(1000);
}
} catch( InterruptedException e ) { }
System.out.println("Saliendo del main");
}
}
Ambos hilos esperan utilizando el método sleep() de la clase Thread; thDemo tres segundos, y main cinco segundos. Java utilizará los tres segundos de thDemo para ir esperando los tres primeros segundos del hilo main.
Por lo tanto la salida por pantalla al ejecutar el programa es:
prompt> java ThreadDemo
Seg: 5
Seg: 4
Seg: 3
Saliendo del hilo hijo
Seg: 2
Seg: 1
Saliendo del hilo main
C. Sincronización de threads
Durante la ejecución de un programa, muchas veces varios procesos han de realizar tareas de una forma sincronizada, actuando en un determinado orden. Para ello en Java se utilizan la palabra reservada syncronized, en la declaración de los procesos con este tipo de características.
Los procesos declarados como syncronized mediante la utilización de excepciones, y de las
...