jueves, 11 de noviembre de 2010

TALLER HILOS

DIFINICION:
Es un mecanismo mediante el cual podemos ejecutar tareas secundarias dentro de una aplicación sin interferir con las tareas principales.


Desde el punto de vista de las aplicaciones los hilos son útiles porque permiten que el flujo del programa sea divido en dos o más partes, cada una ocupándose de alguna tarea de forma independiente. Por ejemplo un hilo puede encargarse de la comunicación con el usuario, mientras que otros actúan en segundo plano, realizando la transmisión de un fichero, accediendo a recursos del sistema (cargar sonidos, leer ficheros...), etc. De hecho, todos los programas con interface gráfico (AWT o Swing) son multihilo porque los eventos y las rutinas de dibujado de las ventanas corren en un hilo distinto al principal.


CICLO DE VIDA DE UN HILO

Un hilo puede presentar cuatro estados distintos:
Nuevo (New): El thread ha sido creado, pero no se ha ejecutado todavía el método start(), por lo que todavía no se ha lanzado.

Ejecutable (Runnable): El thread se está ejecutándose, pero esto no quiere decir que se esté ejecutándose en todo momento, pues ese thread tiene que repartirse el tiempo de CPU con los demás threads que sean también Runnable.

Muerto (Dead): Cuando el thread ya acabó con su función, es decir el método run() ha finalizado, o cuando el programa principal termina, u otro caso, como un error que provoque el paro total del thread.

Bloqueado (Blocked o Not Runnable): El thread podría estar ejecutándose, pero hay algo que se lo impide, como por ejemplo una operación de E/S. Mientras un thread esté en este estado, no se le asigna tiempo de CPU. También cuando se llama a los métodos sleep(long) y wait([long]).


SINTAXIS PARA LA CREACION DE UN HILO

Crear un hilo en java es una tarea muy sencilla. Basta heredar de la clase Thread y definir el método run(). Luego se instancia esta clase y se llama al método start() para que arranque el hilo. Más o menos esto


public MiHilo extends Thread

{

public void run()

{

// Aquí el código que queremos que se ejecute en un hilo separado



}

}

MiHilo elHilo = new MiHilo();



elHilo.start();

System.out.println("Creando hilos");


CLASES PARA CREAR HILOS

Thread
La clase Thread es la clase responsable de producir hilos funcionales para otras clases. Para añadir la funcionalidad de hilo a una clase simplemente se deriva la clase de Thread y se ignora el método run. Es en este método run donde el procesamiento de un hilo toma lugar, y a menudo se refieren a él como el cuerpo del hilo. La clase Thread también define los métodos start y stop, los cuales te permiten comenzar y parar la ejecución del hilo, además de un gran número de métodos útiles.
ThreadDeath
La clase de error ThreadDeath proporciona un mecanismo que permite hacer limpieza después de que un hilo haya sido finalizado de forma asíncrona. Se llama a ThreadDeath una clase error porque deriva de la clase Error, la cual proporciona medios para manejar y notificar errores.

ThreadGroup
La clase ThreadGroup se utiliza para manejar un grupo de hilos de modo conjunto. Esto nos proporciona un medio para controlar de modo eficiente la ejecución de una serie de hilos.
Object

Aunque, estrictamente hablando, no es una clase de apoyo a los hilos, la clase objeto proporciona unos cuantos métodos cruciales dentro de la arquitectura multihilo de Java. Estos métodos son wait, notify y notifyAll. El método wait hace que el hilo de ejecución espere en estado dormido hasta que se le notifique que continúe. Del mismo modo, el método notify informa a un hilo en espera de que continúe con su ejecución. El método notifyAll es similar a notify excepto que se aplica a todos los hilos en espera.

LA INTERFACE RUNNABLE

La interface Runnable proporciona un método alternativo a la utilización de la clase Thread, para los casos en los que no es posible hacer que la clase definida extienda la clase Thread. Esto ocurre cuando dicha clase, que se desea ejecutar en un hilo independiente deba extender alguna otra lase. Dado que no existe herencia múltiple, la citada clase no puede extender a la vez la clase Thread y otra más. En este caso, la clase debe implantar la interface Runnable.